【问题标题】:char Input in C by scanfchar 在 C 中由 scanf 输入
【发布时间】:2015-05-30 00:35:00
【问题描述】:

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

此代码没有给出正确答案:

#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;
}

为什么? 以及如何?

请任何知道为什么会发生这种情况的人帮助我。

【问题讨论】:

  • 我认为第二个答案to this question 可能会有所帮助。尤其是关于“跳过空格”的部分

标签: c char scanf


【解决方案1】:

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

scanf("%c",&ch);

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

scanf(" %c",&ch);

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

【讨论】:

  • 非常感谢。现在我明白了。
【解决方案2】:

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

【讨论】:

  • 非常感谢。现在我明白了。
【解决方案3】:

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

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

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

【讨论】:

  • 谢谢。我对标准输入不太了解。我现在将学习标准输入。
【解决方案4】:

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

【讨论】:

  • 谢谢。我对标准输入不太了解。我现在将阅读有关标准输入的内容。
猜你喜欢
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2022-09-29
  • 2015-04-06
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多