gpt4 book ai didi

c - 关于将 '\0' 放入数组中,scanf 和 gets 的工作方式不同吗?

转载 作者:行者123 更新时间:2023-11-30 16:59:21 25 4
gpt4 key购买 nike

我正在获取并显示名称,并在输入回车键时停止程序。在下面的代码中,我得到了正确的结果(我知道“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' 在这些函数中的工作方式不同吗?

最佳答案

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

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

关于c - 关于将 '\0' 放入数组中,scanf 和 gets 的工作方式不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38186688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com