Q' Q'退出循环进入

时间:2015-05-19 17:07:15

标签: c while-loop getchar

我希望在c中有一个程序,在循环开始时要求用户输入,如果用户点击Q,则结束while循环。 我正在寻找有效的代码而且没有fflush()调用。[我认为用户可以输入' a',' abc' ab2c'在输入处等]。 我尝试了以下方式,但是如果我按下' a'它还包括' \ 0'这导致额外的循环调用。同样,如果用户输入' abc'或者' ab2c'等循环执行多次。

int main (void)
{
    char exit_char = '\0';
    puts ("Entering main()");

    while (1)
    {
        printf ("Please enter your choice: ");

        exit_char = getchar();
        if (exit_char == 'Q')
            break;

        f1();
    }
    return 0;
}

请提出适当的解决方案。

2 个答案:

答案 0 :(得分:2)

在像你这样的情况下,最好逐行读取输入,然后处理每一行。

#define MAX_LINE_LENGTH 200

char* getInput(char line[], size_t len)
{
   printf ("Please enter your choice: ");
   return fgets(line, len, stdin);
}

int main (void)
{
   char line[MAX_LINE_LENGTH];

   while ( getInput(line, sizeof(line)) )
   {
      if ( toupper(line[0]) == 'Q' )
         break;

      // Process the line

   }    
}

答案 1 :(得分:2)

这是你想要的吗?

#include <stdio.h>
#include <ctype.h>

int
main(void)
{
    char buffer[100];

    while (1)
     {
        char *line;

        printf("Please enter your choice: ");
        line = fgets(buffer, sizeof(buffer), stdin);
        if ((line == NULL) || ((toupper(line[0]) == 'Q') && (line[1] == '\n')))
            break;
        printf("Not done yet!\n");
     }
    return 0;
}