scanf和put' \ 0'在一个数组?

时间:2016-07-04 14:06:55

标签: c arrays scanf gets

我正在显示名称,并在输入回车键时停止程序。在下面的代码中,我得到了正确的结果(我知道"得到"已弃用):

#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'在这些函数中的工作方式不同?

2 个答案:

答案 0 :(得分:1)

如果scanf无法为变量赋值(因为输入流有空格,终止&#39;字符串&#39;),它就不会清除它;部分原因是并非所有变量都具有明显的“清晰”特征。状态。

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

答案 1 :(得分:-1)

使用&#34; scanf&#34;变量不会变成一个字符串但是&#34;得到&#34;变量(名称)变为字符串,因为&#34;得到&#34;自动放置&#39; \ 0&#39;在它?