循环故障在c?这有什么不对?

时间:2017-01-15 00:59:38

标签: c loops while-loop char

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char c='y';
    int n=0;
    while(c=='y')
        {
            printf("this is loop number %d\n", n);
            n++;
            printf("do you wish to continue? (y/n)");
            c=getchar();
        }
       return 0; 
    }

while循环在初始迭代后退出,而getchar没有将字符输入视为已经过期!这里的实施有什么问题。

2 个答案:

答案 0 :(得分:2)

当用户按 Enter 时,会生成两个字符:'y''n' 换行符'\n'。第一次调用getchar()获取该字母,下一次调用获取该换行符。您的代码必须忽略所有换行符。

do { c = getchar(); } while(c == '\n');

答案 1 :(得分:0)

当您在终端上输入“y”时,您输入了两个字符。 'y''\n'所以getchar()在第二次通话时返回'\ n'。加getchar()返回int而不是char,但您将其存入char c

#include <stdio.h>
#include <stdlib.h>

int main() {
  int c = 'y';
  int n = 0;
  while (c == 'y') {
    printf("this is loop number %d\n", n);
    n++;
    printf("do you wish to continue? (y/n)");
    while ((c = getchar()) == '\n' && c != EOF);
  }
  return 0;
}

您可以使用scanf(),因为getchar()非常有限。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int main(void) {
  int n = 0;
  while (true) {
    printf("this is loop number %d\n", n++);
    printf("do you wish to continue? (y/n)\n");
    char c;
    if (scanf(" %c", &c) != 1 || c != 'y') {
      break;
    }
  }
}

或者:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  int n = 0;
  {
    char c;
    do {
      printf("this is loop number %d\n", n++);
      printf("do you wish to continue? (y/n)\n");
    } while (scanf(" %c", &c) == 1 && c == 'y');
  }
}