如何忽略输入中的'\ n'字符

时间:2019-01-08 20:20:37

标签: c while-loop scanf

我需要以这样一种方式制作程序:当输入返回键时,它将继续执行程序并再次打印初始行。

我试图用(大小写'\ n')解决它,但是那没有用,我尝试了一些getchar()变体,但是我遇到了同样的问题。

    void main()
{
char nameA[100];
char nameB[100];
char command;
int height;
int quit = 1;

struct node *ring1 = NULL;
struct node *ring2 = NULL;

while(quit)
{
    printf("command? ");
    scanf("%c", %command, 1);

    switch (command)
    {
        case 'q':
            printf("bye\n");
            quit = 0;
            break;

        case 't':
            printf("name? ");
            scanf(" %[^\n]", nameA);
            printf("height? ");
            scanf(" %d", &height);

            ring1 = insert_tail(ring1, nameA, height);
            break;

        case '\n':
            break;

        default:
            break;
    }
}

}

我想要打印的是

  

命令?

     

命令? ...

问题是,如果我使用“%c”,我将忽略新行,如果使用“%c”,输出将如下所示:

  

命令?

     

命令? ...

但是,假设我在代码中使用了“ t”命令,结果将类似于

  

命令? t

     

名字?珠穆朗玛峰

     

高度? 8848

     

命令?命令?

我该如何解决?我认为问题是因为我实际上输入了两个字符“ t”和“ \ n”,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

  

如何忽略输入中的'\ n'字符

在所有命令之后,除了裸'\n'外,其余所有行都被占用。

t情况下,引起问题的是输入的'\n'之后的height。在寻找新命令之前先使用它。

while(quit) {
    printf("command? ");
    scanf("%c", &command);
    switch (command) {
      ...
    }
    if (command != '\n') {
      int ch;
      while ((ch = getchar()) != `'\n'`) && (ch != EOF)) {
        ;
      }
    }
}

提示:请考虑将fgets()用于用户输入,并避免使用scanf()