在c中获取char类型的输入的问题

时间:2010-10-26 12:03:47

标签: c pointers

我在输入c中的字符类型时遇到了麻烦。我的源代码行为很不寻常。

我的代码是:

int n,i;
char *ps;

printf("Total no:");

scanf("%d",&n);

ps=(char *)calloc(n,sizeof(char));

for(i=0;i<n;i++) {
    printf("Enter character %d:",i+1);
    scanf("%c",ps+i);
}

然后根据我的要求,它应该为所有不接受输入。 n的但它不能很好地工作,当循环第一次运行然后接受输入时它不会接受任何输入 当循环运行2次,然后运行4次,依此类推。

所以请告诉我我的代码有什么错误?

- 提前谢谢。

2 个答案:

答案 0 :(得分:4)

循环内对scanf的每次调用都会读取下一个字符。如果输入,例如:

Total no: 4 输入

然后第一个scanf会将4读作int,但 Enter 将会被下一个scanf看到( loop)作为换行符\n

将第一个调用更改为scanf("%d\n", &n),将循环内的调用更改为scanf("%c\n",ps+i)

答案 1 :(得分:1)

您的scanf调用不包含换行符,因此当您输入“5 [enter]”作为输入时,第一个scanf读入“5”,第二个扫描读取换行符。尝试将您的scanf调用更改为scanf("%d\n", &n)scanf("%d%*c", &n),以明确处理换行符。