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

#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一起输出了

    printf函数是可变参数的,可以传入任意多个变量进行输出。

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-17
修改为这样

#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直接读缓冲区内容就返回了。所以你的代码跳过了一个本回答被提问者和网友采纳
第2个回答  2010-10-17
它应该是从前面缓冲区读入了的,(也就是读入了回车键)
scanf("%d",&a);
改成 scanf("%d%*c",&a);
第3个回答  2019-11-02
两个放在一起不矛盾,但是\t是先输出水平制表符,然后\b回退符后退删掉了\t,结果等同于
printf("%c
%c",a,b);
相似回答