如何在C语言中通过输入指定单词终止While循环?
C语言字符串比较错误的修正方案
错误原因
在C语言中,直接使用name != "FINISH"比较字符串是完全错误的。name是字符数组的首地址,"FINISH"是字符串常量的内存地址,这行代码实际比较的是两个内存地址是否不同,而非字符串内容是否匹配。
正确实现方式
要比较字符串内容,必须使用C标准库提供的strcmp函数,该函数定义在<string.h>头文件中。strcmp(a, b)返回0时表示两个字符串内容完全一致,非0则表示不一致。
以下是修正后的完整代码:
#include <stdio.h> #include <string.h> // 引入字符串处理头文件 int main() { int score, count = 0; char name[10]; // 使用do-while结构,确保至少执行一次输入 do { printf("please enter your name and score by order(enter FINISH in name to end)-->"); scanf_s("%s%d", name, 10, &score); // 仅当输入不是FINISH时处理数据 if (strcmp(name, "FINISH") != 0) { count++; printf("Name: %s, Score: %d, Total Entries: %d\n", name, score, count); } } while (strcmp(name, "FINISH") != 0); // 字符串内容不相等时继续循环 printf("Program ended.\n"); return 0; }
关键说明
strcmp函数返回值规则:- 返回0:两个字符串内容完全相同
- 返回负数:第一个字符串小于第二个(按ASCII码比较)
- 返回正数:第一个字符串大于第二个
name数组大小设为10,足够容纳"FINISH"(含结束符共7个字符),避免缓冲区溢出scanf_s是安全输入函数,第二个参数指定name数组的最大长度,防止输入过长导致内存越界
内容的提问来源于stack exchange,提问作者artur anikin
相关产品推荐
相关产品推荐

