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

如何实现输入-1时立即终止整数与字符串的扫描流程?

解决输入-1后仍等待字符串的C语言输入问题

你的代码核心问题在于仅在程序启动时读取一次整数number,循环内未更新该值,导致非-1的情况下会无限读取字符串;同时未实现“读取到-1立即终止”的逻辑——原代码若首次读取的不是-1,会一直停留在循环中读取字符串,直到输入错误。

以下是修正后的代码:

#include <stdio.h>

int main(int argc, char *argv[]) {
    
    int number = 0;
    // 数组长度4刚好容纳"yes"/"no"(含终止符),可根据需求扩容
    char YesOrNo[4];

    // 每次循环先读取整数,判断是否为-1或读取失败
    while (scanf("%d", &number) == 1 && number != -1) {
        // 仅当整数不是-1时,才读取对应的字符串
        // 开头的空格用于跳过整数后的空白字符(换行、空格等)
        scanf(" %s", YesOrNo);
        printf("%d %s\n", number, YesOrNo);
    }

    return 0;
}

关键修正点:

  • 将整数读取操作scanf("%d", &number)放入循环条件,确保每次循环都获取新的整数输入,同时通过==1判断读取是否成功(避免输入非整数导致的死循环)。
  • 当读取到的number为-1时,直接退出循环,不会执行后续的字符串读取,完全符合“输入-1立即终止”的要求。
  • 字符串读取前的空格" %s"用于跳过整数后的空白字符,保证正确读取后续的yes/no。

额外提示:

为避免输入过长字符串导致缓冲区溢出,建议将字符串读取限制长度,比如改为scanf("%3s", YesOrNo),确保最多读取3个字符(留出位置存储终止符\0)。

内容的提问来源于stack exchange,提问作者Justus148

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:05:29