You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:28:13