0

我正在为计费系统编写程序。我在我的程序中使用 do-while 循环。并根据用户输入执行程序。如果用户想继续执行,程序将继续执行。但我在执行方面遇到了问题。我在简单的 do-while 循环中尝试我的逻辑。简单的 do-while 循环也会出现同样的问题。

Problem is: If the input is yes, the program does not get the further input from user.

那个简单的 do-while 循环是:

#include <stdio.h>

main()
{
    int c;
    char ch;
    do
    {
            printf("enter the no less then 4:");
            scanf("%d",&c); 
        switch(c)
        {
            case 1:
                printf("In 1\n");
                break;
            case 2:
                printf("In 2\n");
                break;
            case 3:
                printf("In 3\n");
                break;
        }
        printf("do u want to continue?:");
        ch=getchar();
    }while(ch=='y');
}

如果我把while(ch != 'n')而不是while(ch=='y')程序工作正常。我无法理解这背后的问题。请帮我纠正这个问题。并解释一下这个问题。提前谢谢你。

4

4 回答 4

2

第一次运行,打印 3,用户键入“y”并按回车键

getchar() 读取 'y' 和程序循环

第二次,getchar() 从上一次按键读取换行符

换行符不是 'y' 所以程序不会循环

于 2013-01-17T11:21:30.720 回答
1

几个问题:

  1. getchar 返回一个 int,而不是 char,所以ch必须是一个int就像 c 一样。
  2. scanf 需要一个与 %d 一起使用的指针,所以它应该是scanf("%d", &c);
  3. while应该对 EOF 进行测试,如while ((ch = getchar()) != EOF)
  4. 请注意,输入将包含您应该处理的换行符(例如忽略)。

这应该是相当健壮的:

#include <stdio.h>

int main(void)
{
  int c, ch;

  for (;;) {
    printf ("Enter a number (1, 2 or 3):");
    fflush (stdout);
    if (scanf ("%d", &c) == 1) {
      switch (c) {
      case 1:
        printf ("In 1\n");
        break;
      case 2:
        printf ("In 2\n");
        break;
      case 3:
        printf ("In 3\n");
        break;
      }
      printf ("Do you want to continue? [y/n]:");
      fflush (stdout);
      while ((ch = getchar ())) {
        if (ch == 'y')
          break;
        else if (ch == 'n' || ch == EOF)
          return 0;
      }
    } else {
      printf ("That was not a number. Exiting.\n");
      return 0;
    }
  }
}
于 2013-01-17T12:06:09.233 回答
0

While(ch=='y') 或 while() 中的任何字符,它将根据您的编码发送到案例 3....y 按下,它将发送到案例 3,否则它将无法工作

于 2013-01-17T11:19:22.887 回答
0

不要使用 阅读答案getchar,而是使用fgets

正如其他人解释的那样,第二个getchar调用为您提供了换行符,该换行符是在第一个y.
使用fgets,您将获得用户键入的所有内容。然后您可以检查它是否是y(只需检查第一个字符,或使用strcmp)。

于 2013-01-17T12:36:17.090 回答