C语言的一个简单问题,两个printf为什么一起输出?

#include<stdio.h>main(){inta,c,m,n;floati;charname[20];printf("pleaseinputyourcardnum... #include<stdio.h>
main()
{
int a,c,m,n; float i;
char name[20];
printf("please input your cardnum:\n");
scanf("%d",&a);
printf("please input your name:\n");
scanf("%c",name[20]);
printf("please input your IDnum:\n");
scanf("%d",&c);
printf("welcome,%cMr/Miss,your cardnum is:%d,IDnum is :%d\nplease input your money and year:",name[20],a,c);
scanf("%d%d",&m,&n);
i=m+m*n*0.012;
printf("you will receive:%.6f\n",i);
getch();
}

注意一下
printf("please input your name:\n");
scanf("%c",name[20]);
printf("please input your IDnum:\n");
scanf("%d",&c);
两个printf应该是先输出一个,等说输入name之后再输出第二个,但是我用WINTC的时候是两个一起输出的,这是怎么回事?
你给的答案造成了更大的问题,下面的两个printf一起输出了
展开
 我来答
tattackor
2015-06-10 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:874万
展开全部
  1. printf函数是可变参数的,可以传入任意多个变量进行输出。

    所以如果不是两次printf之间有必要的用户输入,任何时候都可以使用一个printf进行输出。

  2. printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
    printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
    格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

  3. 原型:extern void printf(const char *format,...);
    功能:在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。

zhao61
2010-10-17 · TA获得超过1459个赞
知道小有建树答主
回答量:1065
采纳率:0%
帮助的人:861万
展开全部
修改为这样

#include<stdio.h>
void main()
{
int a,c,m,n; float i;
char name[20];
printf("please input your cardnum:\n");
scanf("%d",&a);
printf("please input your name:\n");
fflush(stdin);
scanf("%s",name);
/*这里你是想输入name这个字符串吧,应该这么写,否则不仅达不到你要的效果,还会溢出*/
fflush(stdin);
printf("please input your IDnum:\n");
scanf("%d",&c);
fflush(stdin);
printf("welcome,%cMr/Miss,your cardnum is:%d,IDnum is :%d\nplease input your money and year:",name[20],a,c);
scanf("%d%d",&m,&n);
i=m+m*n*0.012;
printf("you will receive:%.6f\n",i);
getchv();
}

调用scanf("%d%d",&m,&n)后用fflush把输入缓冲区的内容冲掉,简单的理解,window下回车是\r\n,在参数为"%d"的时候scanf遇到\r就结束了,冲掉前面的内容,但是\n就错误的赋值给后面的scanf语句了。

一般以如果前后两个scanf数据类型不同,例如你的例子,就可能导致遗留\n这样的字符在缓冲区里,下一次调用scanf的时候,由于缓冲区里还有内容,所以就不会读取你键盘的输入了,scanf直接读缓冲区内容就返回了。所以你的代码跳过了一个
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hi_xjy
2010-10-17 · TA获得超过2468个赞
知道大有可为答主
回答量:987
采纳率:0%
帮助的人:1529万
展开全部
它应该是从前面缓冲区读入了的,(也就是读入了回车键)
scanf("%d",&a);
改成 scanf("%d%*c",&a);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乾文敏宾畴
2019-11-02 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:797万
展开全部
两个放在一起不矛盾,但是\t是先输出水平制表符,然后\b回退符后退删掉了\t,结果等同于
printf("%c
%c",a,b);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式