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

在C语言中如何用scanf读取字符串直到输入特定字符串'Q'?

解决读取字符串直到输入'Q'停止的问题

嘿,我来帮你搞定这个问题~你的代码里有两个关键问题导致它没法正常工作,我一步步给你拆解并修正:

你的代码核心错误

  1. 错误的字符串比较方式:你写的if(array == 'Q')完全不对——array是数组名,本质是指向数组首元素的指针,而'Q'是单个字符,这俩根本不是一个类型,没法直接比较。要判断输入的字符串是不是"Q",得用C标准库的strcmp函数。
  2. 未初始化flag变量:你的循环依赖flag == 1才能执行,但代码里没给flag赋值,它的初始值是随机的,很可能一开始就进不了循环。

修正后的基础版代码

先给你一个能直接运行的版本,适合读取不含空格的字符串:

#include <stdio.h>
#include <string.h> // 必须包含这个头文件才能用strcmp

int main() {
    char array[100] = {0};
    int flag = 1; // 初始化flag为1,确保能进入循环

    while (flag == 1) {
        scanf("%s", array);
        // strcmp返回0表示两个字符串完全相等
        if (strcmp(array, "Q") == 0) {
            flag = 0; // 输入Q,停止循环
        } else {
            // 这里可以添加你对其他输入字符串的处理逻辑
            printf("收到输入:%s\n", array);
        }
    }
    printf("已停止输入程序!\n");
    return 0;
}

补充:读取带空格的字符串

如果你的需求是允许输入包含空格的字符串(比如"hello world"),scanf("%s")就不适用了——它遇到空格、换行符就会停止读取。这时候可以用fgets,但要注意它会把输入末尾的换行符也读进来,需要额外处理:

#include <stdio.h>
#include <string.h>

int main() {
    char array[100] = {0};
    int flag = 1;

    while (flag == 1) {
        fgets(array, sizeof(array), stdin);
        // 去掉fgets读入的换行符(如果存在)
        array[strcspn(array, "\n")] = '\0';
        
        if (strcmp(array, "Q") == 0) {
            flag = 0;
        } else {
            printf("收到输入:%s\n", array);
        }
    }
    printf("已停止输入程序!\n");
    return 0;
}

关键知识点提醒

  • strcmp(str1, str2):比较两个字符串的内容,返回0表示完全相等,返回正数表示str1大于str2,负数则相反。
  • 永远不要用==比较字符串:==比较的是两个字符串的内存地址,不是内容,就算两个字符串内容一样,地址也可能不同,所以一定会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:31:49