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
相关产品推荐
相关产品推荐

