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

时间:2017-12-11 20:14:36

标签: c

我正在尝试构建一个程序来计算输入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);

}

3 个答案:

答案 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