scanf配合while循环未终止:输入stop仍无法退出循环
问题解析:输入"stop"循环不终止的原因
嘿,这个问题我刚学C的时候也踩过一模一样的坑!咱们来拆解一下问题所在:
核心问题:字符串比较的错误用法
你写的while (input != "stop")是问题的关键——C语言里不能直接用==或!=比较字符串内容!
这里的input是数组的首地址,"stop"是一个字符串常量的内存地址,这两个地址永远不可能相等,不管你输入什么内容,这个判断条件永远为真,循环自然停不下来。
要比较C风格字符串的内容,必须用标准库函数strcmp(),它会逐字符对比两个字符串:
- 如果两个字符串完全相同,返回
0 - 如果不同,返回非0值
所以正确的循环条件应该是while (strcmp(input, "stop") != 0),记得要在代码开头包含<string.h>头文件,不然编译器会报错。
额外的代码小问题
顺便提两个容易忽略的细节,优化你的代码:
void main()不符合C语言标准,标准写法应该是int main(),最后记得加return 0;scanf("%s20", input)的格式有误,长度限制应该写在%和s之间,而且要给字符串结束符'\0'留一个位置。你的数组是char input[20];,所以应该用scanf("%19s", input),这样最多读取19个字符,避免缓冲区溢出。
修正后的代码示例
#include <stdio.h> #include <string.h> int main() { char input[20]; scanf("%19s", input); while (strcmp(input, "stop") != 0) { printf("%s\n", input); scanf("%19s", input); } return 0; }
内容的提问来源于stack exchange,提问作者David K.
相关产品推荐
相关产品推荐

