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一起输出了 展开
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一起输出了 展开
4个回答
展开全部
printf函数是可变参数的,可以传入任意多个变量进行输出。
所以如果不是两次printf之间有必要的用户输入,任何时候都可以使用一个printf进行输出。
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
printf()函数的调用格式为: printf("<格式化字符串>", <参量表>)。
格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。原型:extern void printf(const char *format,...);
功能:在c语言中产生格式化输出的函数(定义在 stdio.h 中),其向终端(显示器、控制台等)输出字符。
展开全部
修改为这样
#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直接读缓冲区内容就返回了。所以你的代码跳过了一个
#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直接读缓冲区内容就返回了。所以你的代码跳过了一个
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
它应该是从前面缓冲区读入了的,(也就是读入了回车键)
scanf("%d",&a);
改成 scanf("%d%*c",&a);
scanf("%d",&a);
改成 scanf("%d%*c",&a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个放在一起不矛盾,但是\t是先输出水平制表符,然后\b回退符后退删掉了\t,结果等同于
printf("%c
%c",a,b);
printf("%c
%c",a,b);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询