C程序在条件失败时复制字符串(如果)

时间:2014-02-05 16:18:31

标签: c

字符串“键入字符”在条件失败后重复两次(如果) a [0]!='q'。我需要知道它为什么会发生,我该如何解决呢!

#include <stdio.h>

int main(void){
char a[1]="";
here:
puts("type a character");
scanf("%c",&a[0]);
if(a[0] != 'q'){
    puts("try again");
    goto here;
}
if(a[0] == 'q') {
    puts("successful");
}
return 0;
}

2 个答案:

答案 0 :(得分:4)

scanf("%c", ...)将读取输入中的任何字符,包括换行符。因此,如果您按a<enter>b<enter>,则第一个scanf将获得'a',第二个将获得换行符,第三个将获得'b'

在你的情况下,第二次调用scanf时,它将立即返回一个换行符,然后这将导致循环执行第三次。

解决此问题的一种方法是在%cscanf(" %c", ...)之前添加空格。这将导致scanf在读取字符之前跳过所有空格(包括换行符)。

答案 1 :(得分:1)

scanf("%c");ENTER键读取换行符。当您键入字符a时,也会键入a,然后键入ENTER键。现在输入缓冲区中有两个字符。由于换行符仍然在输入缓冲区中,因此您将获得两次字符串type a character

建议不要使用scanf,原因在这里说明Why does everyone say not to use scanf? What should I use instead?

或者你可以使用,

while((c = getchar()) != '\n' && c != EOF)

阅读角色&amp;摆脱换行。