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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:15:36