为什么scanf不能读取空格?
同样在我的代码中,如果我先使用scanf,那么在几行后第二次fgets或scanf,正如你在代码中看到的那样,如果我给出的输入有一个类似的空间,"嘿How是你"然后我的代码循环,为什么呢?
我只使用fgets
修复了它while(1)
{
entry=&entry_var;
*entry=0;
printf("\n++++++++DFS CLIENT MENU++++++++");
printf("\n1- ENTER THE COMMAND");
printf("\n2- EXIT\n");
/*instance 1:if I use scanf here then whether i use scanf or fgets the
second time it loops in *entry==1 */
fgets (command, sizeof(command), stdin);
*entry=atoi(command);
printf("Entry: %d", *entry);
if(*entry==1)
{
printf("\n--------COMMANDING ZONE--------");
printf("\nInput the Function: ");
//This is the second instance
fgets (command, sizeof(command), stdin);
//scanf("%s",command);
printf("\n%s",command);
command_parse(command);
}
else if(*entry==2)
{
break;
}
}
答案 0 :(得分:1)
为什么扫描无法读取空格?
这是一个错误的问题,因为scanf()
读取空格。
scanf()
从stdin
读取并给出了各种指令和说明符,尽力匹配它们。某些说明符会导致scanf()
保存数据。
"%d"
将scanf()
指定为:
1-阅读并丢弃所有空白区域
2-阅读并将数字文本转换为int
,将结果保存到i
3-继续步骤2,直到读取非数字字符,然后返回stdin
4-如果步骤2成功,则返回1。如果步骤2仅遇到非数字输入,则返回0。否则返回EOF
。
int i;
if (1 == scanf("%d", &i)) GoodToGo();
除scanf()
,"%c"
,"%n"
之外的所有"%[]"
格式说明符,首先读取并丢弃前导空格。
"%c"
将scanf()
指定为:
阅读char
到c
,包括任何空格字符
返回1或EOF。
char c;
if (1 == scanf("%c", &c)) GoodToGo();
scanf()
家庭细节在这里不仅仅是一个简单的答案。查看在线资源了解详情。
最好使用fgets()
来读取一行而不是scanf(any_format)