char通过scanf输入C.

时间:2015-03-26 04:05:31

标签: c char scanf

请帮帮我。 我想知道为什么会这样。

此代码未给出正确答案:

#include < stdio.h>

int main()

{

  char c,ch;

  int i;

    printf("Welcome buddy!\n\nPlease input first character of your name: ");
    scanf("%c",&c);

    printf("\nPlease input first character of your lovers name: ");
    scanf("%c",&ch);

    printf("\nHow many children do you want? ");
    scanf("%d",&i);

    printf("\n\n%c loves %c and %c want %d children",c,ch,c,i);

  return 0;
}

但是这段代码给出了正确答案。

#include < stdio.h>

int main()
{
  char c,ch;
  int i;

    printf("Welcome buddy!\n\nPlease input first character of your name: ");
    scanf(" %c",&c);

    printf("\nPlease input first character of your lovers name: ");
    scanf(" %c",&ch);

    printf("\nHow many children do you want? ");
    scanf("%d",&i);

    printf("\n\n%c loves %c and %c want %d children",c,ch,c,i);

  return 0;
}

为什么呢? 怎么样?

请帮助我知道发生这种情况的人。

4 个答案:

答案 0 :(得分:4)

当你这样做时,它不会忽略空格。

scanf("%c",&ch);

当您将输入提供给第一个scanf时,您将获得enter('\n')。它是一个字符,因此它将作为第二个scanf的输入。因此,第二个输入将不会从用户获得输入。

scanf(" %c",&ch);

如果你这样做,那么它会忽略那个空格字符,然后它会要求用户输入。

答案 1 :(得分:1)

第一个程序无法正常工作,因为检查输入时的scanf函数在尝试解析字符时不会自动删除空格。
因此,在第一个程序中,c的值将是char,ch的值将是'\n'(换行符)char。
使用scanf("\n%c", &varname);scanf(" %c", &varname);将解析在按Enter键时插入的换行符。

答案 2 :(得分:0)

scanf 函数从标准输入流 stdin 读取数据。

int scanf(const char * format,...); 格式中的空格字符(例如空格和换行符)会导致scanf读取但不存储输入中的所有连续空格字符,直到下一个字符不是一个白色空间的角色。

现在,当您按下“a”和“return”时,在 stdin 流中有两个字符:a和\ n char。 这就是为什么第二次调用scanf将\ n char分配给ch var。

答案 3 :(得分:0)

你的scanf()函数从 stdin 获取输入。现在,当您从键盘上点击任何字符并按Enter键时,您输入的字符将被scanf()扫描,但仍然输入存在于 stdin 中,它将被下面的scanf()扫描。要忽略空格,必须使用带有“%c”的scanf()。