我需要以这样一种方式制作程序:当输入返回键时,它将继续执行程序并再次打印初始行。
我试图用(大小写'\ 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”,但我不知道如何解决这个问题。
答案 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()
。