我正在使用c来创建一个非常基本的程序。我使用scanf从控制台获取输入,但当我使用它时,它似乎只是“跳过”它。
以下是代码:
#include <stdio.h>
#include <string.h>
int main(){
char name[20];
char yn;
printf("Welcome to Benjamin's first C programme! \n\n");
do{
printf("What is your name? \t");
scanf("%s", name);
printf("\n");
printf("Is your name %s [y/n]?", name);
scanf("%c", &yn);
printf("\n");
} while(yn != 'y');
}
答案 0 :(得分:3)
在第二个scanf()
scanf(" %c", &yn);
此空格将捕获您在第一次输入后输入的换行符
答案 1 :(得分:2)
你明显的跳过是因为%s说明符匹配一个字符串,直到空格或换行符。在这种情况下,它是一个换行符。问题是它将它留在输入流中,并且下一个读数与之匹配。因此,在你的yn变量中,总会有换行符。为了防止这种情况,请在%c说明符之前插入一个空格,以便掌握所有空格(空格,换行符,制表符):
scanf(" %c", &yn);
另请注意,出于同样的原因,如果我插入我的全名(即我插入空格),您的程序将无效。
答案 2 :(得分:1)
作为替代方案 ,请尝试使用getchar()
替换:
scanf("%c", &yn);
使用:
getchar();//eat the '\n' from <return>
yn = getchar();
有关记录 我更喜欢其他答案,只是提供此选项...