在c中默认输入空格

时间:2013-02-11 17:37:13

标签: c

在下面的程序中,当我从键盘读取输入时,它只占用2个字符而不是4个字符,其余2个字符默认占用空格。 为什么呢???

程序通过指针 /

获取char输入
int c,inc,arrysize;
char *revstring;
printf("enter the size of char arry:");
scanf("%d",&arrysize);
revstring = (char *)malloc(arrysize * sizeof(*revstring));
printf("%d",sizeof(revstring));
printf("enter the array elements:");
for(inc=0;inc<arrysize;inc++)
{
scanf("%c",&revstring[inc]);

}
for(inc =0;inc<arrysize;inc++)
    printf("%c",revstring[inc]);
getch();
return 0;

}

2 个答案:

答案 0 :(得分:3)

scanf读取格式化输入。当您录制一个数字时,您将对数字进行录音,然后按<Enter>。因此,\n中剩余的stdin会在下一个scanf中读取。如果您在字符之间按<Enter>,则同样适用。

解决方案是在每次输入后使用标准输入流中的字符,如下所示:

#include <stdio.h>

void
clean_stdin (void)
{
  int c;

  while ((c = getchar ()) != '\n' && c != EOF)
    ;
}

另一个想法是使用fgets来获取人力输入。 scanf不适合此类读数。

答案 1 :(得分:0)

大部分时间scanf读取格式化输入。对于大多数%格式,scanf将首先读取并丢弃任何空格,然后解析指定的项目。因此,对于scanf("%d", ...,它将接受带有初始空格(甚至是额外的换行符!)的输入而没有任何问题。

然而,其中一个例外是%c。使用%c,scanf会读取下一个字符,无论它是什么。如果下一个字符是空格或换行符,那就是你得到的。

根据您的具体需要,您可以在格式字符串中使用空格:

scanf(" %c",&revstring[inc]);

该空格使scanf跳过输入中的任何空格,为您提供下一个非空白字符读取。但是,这将导致无法输入带有空格的字符串(空格将被忽略)。或者,您可以在循环之前scanf(" ");跳过空格一次,或scanf("%*[^\n]"); scanf("%*c");跳过所有内容直到下一个换行符,然后跳过换行符。