2016-07-04 52 views
0

我得到并显示名称,并在我输入密钥时停止程序。在下面的代码中,我得到了正确的结果(我知道“被”已经过时):scanf并获得不同的工作,将' 0'放入数组中?

#include <stdio.h> 

main() 
{ 
    char name[50]; 

    while(1) 
    { 
     printf("Name: "); 
     scanf("%s", name); 

     if(name[0]=='\0') 
      break; 
     else 
      printf("Name entered: %s\n", name); 
    } 
} 

但是当我尝试使用scanf函数:

printf("Nome: "); 
scanf("%s", nome); 

条件name[0]=='\0'永远是真实的这段时间。为什么? '\0'在这些功能中的作用是不同的?

+0

因为'Enter Key'是'\ n' – Shank

+0

http://stackoverflow.com/questions/26391465/why-is-adding-a-leading-space-in-a-scanf-format-string-recommended check这个了解@Shank评论 – 2016-07-04 14:15:05

+0

谢谢Olivier。 – Ricardo

回答

1

如果scanf无法为变量赋值(因为输入流有一个空格,终止'string'),它不会将其清除;部分原因在于并非所有变量都有明显的“清晰”状态。

所以在您的scanf之后,nome仍然包含之前包含的任何内容。您需要检查scanf是否能够通过测试其返回值来分配变量: if (scanf(...) == 1) - 这意味着'did scanf成功分配了一个变量?'

+0

如果我放了一些名字,我可以显示这个名字,这意味着scanf工作。但是当我输入(无字符)时,程序不会结束。所以我猜'\ 0'不在数组“名称”中。就是它? – Ricardo

+0

是的,'\ n'告诉scanf停止reading_,并且它不会复制它的名字,它_stops_。 – Aganju

+0

它停止阅读吗?在我的情况下,它实际上没有。 –

-1

使用“scanf”变量不会变成一个字符串,但与“获取”变量(名称)变成字符串,因为“获取”自动把'\ 0'在它?

相关问题