我尝试了一个简单的程序..函数返回整数和字符指针..在我运行该代码后,我发现了一些奇怪的行为,我发现了扫描消息(输入a,b :)读取两个整数输入和消息(输入c,d :)读取两个char输入。但是在运行时..我发现char c的输入在我输入a,b的输入后立即读取。 例如: 输入a,b:10 20 输入c,d:g 它只得到一个输入(对于d),而对于c的输入是20后的换行符。 例如2: 输入a,b:10 20A 输入c,d:g 只有一个输入(对于d),c的输入在20后为 a 。 为什么会发生这种情况......请澄清一下
int* add(int *a,int *b)
{
return (*a>*b?a:b);
}
char* charret(char *c,char *d)
{
return (*c>*d?c:d);
}
int main()
{
int a,b;
char c,d;
printf("\n\t\tFUNCTION RETURNING INTEGER POINTER\n\t");
printf("Enter the Number A and B:");
scanf("%d %d",&a,&b);
printf("\tEnter the character c :");
scanf("%c %c",&c,&d);
printf("The Biggestt Value is : %d\n\t",*add(&a,&b));
printf("\n\tThe character c= %c hi d= %c",c,d);
// scanf("%c",&d);
printf("\n\tThe Biggestt Value is : %c", *charret(&c,&d));
getch();
return 0;
}
答案 0 :(得分:6)
%c
将读取任何字符,包括您之前条目中的换行符。如果要读取第一个非空白字符,请在格式字符串中添加%c之前的空格:
scanf(" %c %c",&c,&d);
/* ^ added space */
这将导致scanf()
在阅读角色之前吃掉任意数量的空格。
答案 1 :(得分:1)
对于大多数scanf()
说明符,会跳过任何前导空格。 %c
是一个例外,因为它读取单个字符值,包括空格字符。请记住,当您按 Enter 时,您已将'\n'
发送到输入缓冲区。
scanf(“%d%d”,& a,& b);
读两个数字。按 Enter 结尾的\n
留在缓冲区中。
scanf(“%c%c”,& c,& d);
读取两个字符,第一个字符将是缓冲区中剩余的\n
。解决这个问题的一种方法是:
while(getch()!='\ n');
这将包括一个包括换行符在内的所有内容。您可以在scanf()
行之后将其放在后面留下换行符。