在C语言中如何用scanf读取字符串直到输入特定字符串'Q'?
解决读取字符串直到输入'Q'停止的问题
嘿,我来帮你搞定这个问题~你的代码里有两个关键问题导致它没法正常工作,我一步步给你拆解并修正:
你的代码核心错误
- 错误的字符串比较方式:你写的
if(array == 'Q')完全不对——array是数组名,本质是指向数组首元素的指针,而'Q'是单个字符,这俩根本不是一个类型,没法直接比较。要判断输入的字符串是不是"Q",得用C标准库的strcmp函数。 - 未初始化
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
相关产品推荐
相关产品推荐

