我尝试了一个简单的程序..函数返回整数和字符指针。在我运行该代码后,我发现一些奇怪的行为由scanf ..我试图打印消息(输入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后…为什么会发生这种情况……请澄清一下
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("nttFUNCTION RETURNING INTEGER POINTERnt"); 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 : %dnt",*add(&a,&b)); printf("ntThe character c= %c hi d= %c",c,d); // scanf("%c",&d); printf("ntThe Biggestt Value is : %c", *charret(&c,&d)); getch(); return 0; }
%c
将读取任何字符,包括上一个条目中的换行符。 如果要读取第一个非空白字符,请在格式字符串中的%c之前添加一个空格:
scanf(" %c %c",&c,&d); /* ^ added space */
这将导致scanf()
在读取字符之前吃掉任意数量的空格。
对于大多数scanf()
说明符,将跳过任何前导空格。 %c
是一个例外,因为它读取单个字符值,包括空格字符。 请记住,当您按Enter键时 ,您已向输入缓冲区发送了'n'
。
scanf(“%d%d”,&a,&b);
读两个数字。 最后的n
,按Enter键 ,将保留在缓冲区中。
scanf(“%c%c”,&c,&d);
读取两个字符,第一个字符将是缓冲区中的n
左侧。 解决这个问题的一种方法是:
while(getch()!=’ n’);
这将吃掉包括换行符在内的所有内容。 你可以把它放在你知道的scanf()
行后面留下换行符。
以上就是c/c++开发分享scanf在其执行点之前工作相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522879.html