C语言,与char的scanf问题

时间:2013-11-26 19:46:36

标签: c char scanf

我正在使用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');
}

3 个答案:

答案 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();  

有关记录 我更喜欢其他答案,只是提供此选项...