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

C语言中用do-while循环读取两变量,输入exit时退出的实现问题

搞定你的do-while循环输入问题

嘿,我来帮你捋捋代码里的问题,这几个小坑确实容易踩:

首先,你犯了三个关键错误,直接导致循环条件失效:

  • 变量类型不对:char var1; char var2;是单个字符变量,但scanf("%s")是用来读取字符串的,单个char根本装不下一串字符,会直接搞乱内存,strcmp自然没法正常工作。得换成字符数组,比如char var1[20]; char var2[20];,这样才能存下输入的字符串。
  • scanf传参错了:用%s读字符串时,直接传数组名就行(数组名本身就是指向首元素的指针),不用加&,加了反而会出问题。
  • strcmp用错了:strcmp的两个参数都得是字符串(用双引号包裹的那种),你传&var1是单个char的地址,不是字符串,而且'quit'是单个字符(单引号),字符串得写成"quit"或者你需要的"exit"。

给你改好的代码,实现输入两个变量,只要第一个变量是exit就退出循环:

#include <stdio.h>
#include <string.h> // 必须加这个头文件,不然strcmp用不了

int main() {
    // 定义足够大的字符数组存输入,这里设20长度足够日常使用
    char var1[20];
    char var2[20];
    
    do {
        // 读取两个字符串,直接传数组名就行
        scanf("%s %s", var1, var2);
        // 判断第一个变量是不是"exit",不是就继续循环
    } while (strcmp(var1, "exit") != 0);
    
    return 0;
}

如果你的需求是不管第一个还是第二个变量是"exit"都退出,那循环条件改成这样就行:

} while (strcmp(var1, "exit") != 0 && strcmp(var2, "exit") != 0);

再补几个实用小细节:

  • 一定要加<string.h>头文件,不然编译器会报错找不到strcmp。
  • 怕输入的字符串太长溢出?可以改成scanf("%19s %19s", var1, var2);,限制最多读19个字符(留一个位置存字符串结束符\0)。
  • 如果用户可能只输入一个exit(没第二个变量),上面的scanf会卡住等输入,这种情况可以用fgets先读整行再拆分,不过简单场景下上面的代码完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:07