我正在尝试构建一个程序来计算输入a / b / c的次数并打印结果。现在我只能使用for循环输入三个字母中的一个4次。我的问题是,可以采取措施让用户(我)决定何时应该停止循环?也许就像按'Z'那样计数变量'i'就不再计数了。
我实际上知道使用while循环和函数getchar实现此方法的方法,但我正在尝试找到不同的方法。
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);
}
//使用while循环
#include <stdio.h>
main(){
int aCount=0;
int bCount=0;
int cCount=0;
int x;
char a[10];
a[0] = 'f';
while((x = getchar()) != a[0]){
switch(x){
case 'A':
case 'a':
aCount++;
break;
case 'B':
case 'b':
bCount++;
break;
case 'C':
case 'c':
cCount++;
break;
}
}
printf("\nA - %d\nB - %d\nC - %d", aCount,bCount,cCount);
}
答案 0 :(得分:0)
由于您目前正在执行for (i = 0; i<4; i++)
,因此您只检查i
是否小于4
,因此只会循环4次。您可以设置i < #some larger number
,它将允许用户输入更多选项,但不会是无限的。您还可以执行以下操作,检查i
是否不等于z
。一旦它等于z
,它将退出循环。
免责声明:虽然这似乎有效但我不确定它可能带来的影响,因为我不是一个C程序员。
编辑:根据@yano和@Weather Vane的建议,我已将其更改为使用scanf
而不是getchar
,这将有助于删除换行符。我还将i更改/初始化为char i = -1;
#include <stdio.h>
#include <ctype.h>
int main() {
char i = -1;
int aCount=0;
int bCount=0;
int cCount=0;
puts("Please choose A, B, C, or Z to exit.");
for(;i != 'z';) {
scanf(" %c", &i)
i = tolower(i);
switch(i){
case 'a':
aCount++;
break;
case 'b':
bCount++;
break;
case 'c':
cCount++;
break;
default:
puts("Mxm choose A, B or C, or Z to quit.");
break;
}
}
printf("\nA - %d\nB - %d\nC - %d\n", aCount,bCount,cCount);
}
答案 1 :(得分:0)
您也可以在不使用switch
的情况下执行此操作。一个简单的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;
}
答案 2 :(得分:-1)
我确定还有更多&#34;正确&#34;这样做的方法,但简单地让循环的延续依赖于特定的输入应该可以做到这一点:
SELECT
ug.lookup_key,
count(ug.id) as count
FROM user u
INNER JOIN user_group ug on ug.id = u.id
WHERE
u.age >= 11 AND
u.age <= 20 AND
ug.lookup_key in('12345')
GROUP BY ug.lookup_key
HAVING count(ug.id) < 7