gpt4 book ai didi

c - 在c编程-while循环中使用 '\0'结束程序

转载 作者:太空宇宙 更新时间:2023-11-04 07:58:09 24 4
gpt4 key购买 nike

我在c语言中使用'\0'完成while循环时遇到问题,c代码如下

#include<stdio.h>

char r;

int main()
{
do
{
scanf("%c", &r );
printf("%c", r);
}
while (r!='\0');

return 0;
}

我的问题是程序永远不会在键入的字符串行的最后一个字符处完成,while 循环由于 scanf 始终处于等待模式并且永远不会转到 return 0。我不知道为什么会这样。

这个程序的输出是这样的:

1234
2345
4556
7788
2345, 4556, 7788

这些是我输入的数字,但程序永远不会完成(永远不会返回 return 0),我只想打印一个字符串,我希望程序结束。

最佳答案

典型的用户输入是一个,一个字符序列直到并包括最后一个'\n'

作为用户输入的一部分,'\0' 只是另一个字符。通常很难输入。一些键盘允许使用 CtrlShift@ 或其他方式输入 @user3629249

很少在输入中使用字符串(直到并包括最后一个'\0' 的字符序列)。

要处理用户输入,一种简单的方法是使用 fgets() 读取用户输入的fgets(buf) 通过附加一个空字符 '\0' 将该输入保存为一个字符串读取到的字符:全部保存在buf中。

#include<stdio.h>

int main(void) {
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) {
puts("End-of-file or error encountered");
} else {
// maybe lop off the potential trailing \n from buf
buf[strcspn(buf, "\n")] = '\0';
printf("User input was <%s>\n", buf);
}
return 0;
}

对于最终用户输入,通常的方法是发出“文件结束”信号,参见 recognise return as EOF on the console

如果代码必须使用scanf();,请检查返回值以检测文件结尾或输入错误。 @user3629249

if (scanf("%c", &r ) != 1) {
puts("End-of-file or error encountered");
}

关于c - 在c编程-while循环中使用 '\0'结束程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48615135/

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