繁体   English   中英

char由scanf在C中输入

[英]char Input in C by 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;
}

为什么? 如何?

请帮助我知道这个原因的任何人。

当您这样做时,它不会忽略空白。

scanf("%c",&ch);

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

scanf(" %c",&ch);

如果您这样给出,则它将忽略该空格字符,然后将要求用户输入。

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

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

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

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

您的scanf()函数从stdin接受输入。 现在,当您敲击键盘上的任何字符并按Enter时,您输入的字符将由scanf()扫描,但标准输入中仍存在enter,它将由其下方的scanf()进行扫描。 要忽略空格,您必须将scanf()与“%c”一起使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM