为什么扫描无法读取空格?

时间:2015-10-24 01:14:20

标签: c scanf fgets

为什么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;
}
}

1 个答案:

答案 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()指定为:
阅读charc包括任何空格字符 返回1或EOF。

char c;
if (1 == scanf("%c", &c)) GoodToGo();

scanf()家庭细节在这里不仅仅是一个简单的答案。查看在线资源了解详情。

最好使用fgets()来读取一行而不是scanf(any_format)