C语言scanf函数怎么只读取字符串的第一个字符

比如输入yes,只给变量赋值y
char yon;
scanf("%c",&yon);
if(yon==89||yon==121)
应该怎样改,使输入yes时也使if为真

我用了for(;;)死循环,最后有break;和getchar();,输入y或Y开头(只输入y或Y没问题)的字符串就会一闪关闭,输入其他的就没问题

你是怎么写输入控制字符串的????

要想输入yes

char array[4]; //定义一个长度为4的字符串

scanf("%s",array); //%s输出字符串控制符。array本来就是一个地址

就行了。

char yon;
scanf("%c",&yon);
if(yon==89||yon==121)
应该怎样改,使输入yes时也使if为真
【这段程序只能输入一个字符,不能输入yes这个字符串啊,
yes要占3个字符的空间,一个yon变量装不下】

希望采纳~~~~追问

需要怎样改

追答

你想输入yes才能通过?

#include
#include

int main(void)
{
char yon[10];

scanf("%s",yon);

if (0 == strcmp(yon,"yes") || 0 == strcmp(yon,"YES"))
printf("You choose yes!\n");
else
printf("You choose no!\n");

return 0;
}

追问

只要输入的第一个字符是y或Y就能通过,现在输入如果no或其他的也能执行else的内容,但输入yes或YES后程序一闪就关闭了

追答

你用的是DEV C++??
Dev C++ 运行完之后就会自动关闭
Visual C++ 就不会了,会显示“Press any key to continus”

要想让Dev C++运行完之后不关闭,
要加头文件#include
并在return 0;之前加一句getch();

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-12
有了char
a[10];,那么a就是这个数组的第一个元素的指针,&a就是这个数组的指针;因为一维数组的第一个元素的指针和这个数组的指针是同一个地址,区别是a+1指向a[1],而&a+1就指向a[10]了(这里已越界了)。但&a和a的"值"是相同的,只是类型不同。c调用函数时,实参的类型都会被强制为形参的类型,scanf("%s",
&a)或scanf("%s",
a)中要求参数是char
*型指针,那么&a尽管是char
**类型,但被强行转换为char
*型了……
第2个回答  2011-10-06
你现在这样子写输入yes时也是为真的,只不过残留有内容在输入缓冲中
如果不希望残留,可以这样写:
char yon;
scanf("%c",&yon);
fflush(stdin);
if( you=='y' || yon=='Y' )追问

可是我用DEV C++编译运行后输入yes后程序一闪就关闭了,输入y就能继续运行

追答

应该就是我说的残留问题,你试一下这样:
char yon;
scanf("%c",&yon);
fflush(stdin);
if( you=='y' || yon=='Y' )

第3个回答  2011-10-06
你定义的是char y吗?这样肯定是只有一个字符的,要定义字符数组
第4个回答  2011-10-06
#include <stdio.h>
main()
{
char y[10];
scanf("%1s",&y);
printf("%s\n",y);
}
相似回答