如何让用户决定何时停止for循环计数(C编程)

如何让用户决定何时停止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=

我正在尝试建立一个程序,计算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);
  }
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停止@WeatherVane
scanf
将是一个更好的选择,因为可以使用
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()
签名已经过时。我说-如果你不能发布一个漂亮的答案,就不要发布。那么?这不是重点,是吗?显然,如果它要按预期工作,就必须对其进行重组,但这不是问题。问题是用户如何决定打破循环,这是一个解决方案。当然,我已经输入了一个错误,但如果是这样的话,我就需要修改问题出在哪里,然后写下什么,对它要有礼貌,否则,就像你说的那样