繁体   English   中英

为什么scanf或fgetc不能按预期工作

[英]Why scanf or fgetc does not work as expected

以下是我的代码,它没有停止第一个索引,我想知道为什么吗? scanf相同的结果

#include<stdio.h>

void main()
{
  int n = 0, i = 0;
  char arr[10];
  printf("How many  characters do u want to enter ");
  scanf("%d", &n);
  //printf("\n\t%d", n);
  for(i = 0; i < n; i++)
  {     
    printf("Enter %d character-->\n",i);
    char ch = fgetc(stdin);
    arr[i] = ch;
    //putchar(arr[i]);    
  }     
  i = 0;
  printf("You have entered characters are \n");
  for(i = 0; i < n; i++)
  {     
    printf("arr[%d] = %c\n", i, arr[i]);
  }     
  printf("\n");
}

当我运行此代码时,我会遵循

How many  characters do u want to enter 5
Enter 0 character-->
Enter 1 character-->

程序不等待第一个字符输入。

输入流上有一个结束符,它由scanf("%d",&n)保留在那里,并由第一个fgetc读取

与scanf相同的结果

您是否正确使用scanf 尝试以下操作(不要错过%c之前的空格):

for(i = 0; i < n; i++)
{
    printf("Enter %d character-->\n",i);
    scanf(" %c", &arr[i]);
}

终端往往是行缓冲的,这意味着可以逐行访问流内容。

因此,当fgetc开始从STDIN读取时,它将读取一个字符并留下换行符。 因此,您应该使用scanf()scanf(" %c", &arr[i]); 正如库比建议的那样。 否则,您需要丢弃该换行符。 你可以用这个

  for(i = 0; i < n; i++)
  {     
    printf("Enter %d character-->\n",i);
    char ch = fgetc(stdin);    // newline is consumed here
    if(ch=='\n')
        ch = fgetc(stdin);         // you get the expected value
    arr[i] = ch;
    //putchar(arr[i]);    
  } 

暂无
暂无

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

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