如何让用户决定何时停止for循环计数(C编程)
我正在尝试建立一个程序,计算a/b/c输入的次数并打印结果。现在我只能使用for循环4次输入三个字母中的一个。我的问题是,可以做些什么让用户(我)决定何时停止循环?可能像按“Z”键一样,然后计数变量“i”停止计数 实际上,我知道一种使用while循环和函数getchar实现这一点的方法,但我正在尝试找到不同的方法如何让用户决定何时停止for循环计数(C编程),c,C,我正在尝试建立一个程序,计算a/b/c输入的次数并打印结果。现在我只能使用for循环4次输入三个字母中的一个。我的问题是,可以做些什么让用户(我)决定何时停止循环?可能像按“Z”键一样,然后计数变量“i”停止计数 实际上,我知道一种使用while循环和函数getchar实现这一点的方法,但我正在尝试找到不同的方法 main() { int i; char a[10]; int aCount=0; int bCount=0; int cCount=
main()
{
int i;
char a[10];
int aCount=0;
int bCount=0;
int cCount=0;
for(i=0; i<4; i++)
{
scanf("%s", &a[i]);
switch(a[i])
{
case 'A':
case 'a':
aCount++;
break;
case 'B':
case 'b':
bCount++;
break;
case 'C':
case 'c':
cCount++;
break;
default:
puts("Mxm choose A, B or C");
break;
}
}
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
}
main()
{
int i;
chara[10];
int aCount=0;
int bCount=0;
int cCount=0;
对于(i=0;i我确信有更多“正确”的方法,但简单地让循环的延续依赖于特定的输入应该可以做到这一点,如下所示:
int main()
{
int i;
char a = '?';
int aCount=0;
int bCount=0;
int cCount=0;
while(a != 'q' && a != 'Q')
{
scanf("%c", &a);
switch(a)
{
case 'A':
case 'a':
aCount++;
break;
case 'B':
case 'b':
bCount++;
break;
case 'C':
case 'c':
cCount++;
break;
default:
puts("Mxm choose A, B, C or Q to quit.");
break;
}
}
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
}
我相信有更多“正确”的方法可以做到这一点,但简单地让循环的延续依赖于特定的输入应该可以做到这一点,例如:
int main()
{
int i;
char a = '?';
int aCount=0;
int bCount=0;
int cCount=0;
while(a != 'q' && a != 'Q')
{
scanf("%c", &a);
switch(a)
{
case 'A':
case 'a':
aCount++;
break;
case 'B':
case 'b':
bCount++;
break;
case 'C':
case 'c':
cCount++;
break;
default:
puts("Mxm choose A, B, C or Q to quit.");
break;
}
}
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
}
由于您当前正在执行for(i=0;i由于您当前正在执行for(i=0;i您也可以不使用开关来执行此操作。一个简单的do while
循环和if else
语句。如果您希望检查10个以上的元素,您可以更改宏定义
#include<stdio.h>
int main()
{
int aCount=0;
int bCount=0;
int cCount=0;
char ch;
char temp;
do{
scanf(" %c", &temp);
if(a[i]=='a'||a[i]=='A')aCount++;
else if(a[i]=='b'||a[i]=='B')bCount++;
else if(a[i]=='c'||a[i]=='C')cCount++;
printf("Continue??");
scanf(" %c", &ch);
}while(ch != 'z');
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
return 0;
}
#包括
int main()
{
int aCount=0;
int bCount=0;
int cCount=0;
char ch;
焦炭温度;
做{
scanf(“%c”、&temp);
如果(a[i]=='a'| | a[i]='a')a账户++;
如果(a[i]=“b”| a[i]=“b”)b计数++;
如果(a[i]=“c”| a[i]=“c”)帐户++;
printf(“继续”);
scanf(“%c”和“ch”);
}而(ch!=“z”);
printf(“\nA-%d\nB-%d\nC-%d”,aCount,bCount,cCount);
返回0;
}
您也可以不使用开关来执行此操作。一个简单的do while
循环和if else
语句。如果您希望检查10个以上的元素,您可以更改宏定义
#include<stdio.h>
int main()
{
int aCount=0;
int bCount=0;
int cCount=0;
char ch;
char temp;
do{
scanf(" %c", &temp);
if(a[i]=='a'||a[i]=='A')aCount++;
else if(a[i]=='b'||a[i]=='B')bCount++;
else if(a[i]=='c'||a[i]=='C')cCount++;
printf("Continue??");
scanf(" %c", &ch);
}while(ch != 'z');
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
return 0;
}
#包括
int main()
{
int aCount=0;
int bCount=0;
int cCount=0;
char ch;
焦炭温度;
做{
scanf(“%c”、&temp);
如果(a[i]=='a'| | a[i]='a')a账户++;
如果(a[i]=“b”| a[i]=“b”)b计数++;
如果(a[i]=“c”| a[i]=“c”)帐户++;
printf(“继续”);
scanf(“%c”和“ch”);
}而(ch!=“z”);
printf(“\nA-%d\nB-%d\nC-%d”,aCount,bCount,cCount);
返回0;
}
while
loop方法在哪里?如果代码有效,那么问题应该在CodeReview上吗?我想说,这段代码可以很容易地适应更多的case
语句,并且for
循环被while
loop替换。您还应该替换char[10]
使用更合理的方法,例如单个字符
,然后执行。scanf(“%s”、&a[i]);
可能应该是scanf(“%c”、&a[i]);
也可以是开关(tolower(a[i])
节省了很多案例。我很少对答案投反对票,但这些答案都很糟糕。查看我编辑的帖子//使用while循环,你按f键停止@WeatherVaneSo你所做的while循环方法在哪里?如果代码有效,问题应该在CodeReview上吗?我想说,这段代码可以很容易地与更多的c一起修改ase
语句,并用for
循环替换为while
循环。您还应将字符a[10];
替换为更合理的字符,例如单个字符
,然后执行。scanf(“%s”、&a[i]);
可能应该是scanf(“%c”、&a[i]);
也应该是开关(tolower a[i])
节省了很多案例。我很少对答案投反对票,但这些答案都很糟糕。查看我编辑的帖子//使用while循环,按f停止@WeatherVanescanf
将是一个更好的选择,因为可以使用scanf(“%c”、&ch)轻松过滤掉换行符
其他答案中漏掉的一点。scanf
将是一个更好的选择,因为可以使用scanf(“%c”,&ch)轻松过滤掉换行符。
其他答案中漏掉的一点。数组是干什么用的?假设用户去了?这会破坏数组。fflush(stdin);scanf(“%c”,&ch)
=>scanf(“%c”,&ch)
注意过滤前导空格的空格。你错过了基本空格,并且有两个实例。为什么你仍然有那个数组?它是干什么的?数组是…我想…可能是因为OP使用了它。这也可以在没有数组的情况下完成。使用temp
变量。数组是做什么的?假设用户是这会破坏数组。fflush(stdin);scanf(“%c”和&ch);
=>scanf(“%c”和&ch)
注意过滤前导空格的空格。你错过了基本空格,并且有两个实例。为什么你仍然有那个数组?它是做什么的?数组是…我想…可能是因为OP使用了它。这也可以在没有数组的情况下完成。使用temp
变量。@WeatherVane确实有。它不是s看起来很漂亮,只是为了说明原理。而且它确实有效,所以我不知道neg rep是怎么回事。即使输入有效字符,代码也会发出default
failure提示,因为它无法处理输入后的换行符,而该换行符在下一个循环中被拾取。但是它忽略了提示wh应首先输入at。还有main()
签名已经过时。我说-如果你不能发布一个漂亮的答案,就不要发布。那么?这不是重点,是吗?显然,如果它要按预期工作,就必须对其进行重组,但这不是问题。问题是用户如何决定打破循环,这是一个解决方案。当然,我已经输入了一个错误,但如果是这样的话,我就需要修改问题出在哪里,然后写下什么,对它要有礼貌,否则,就像你说的那样