C语言 格式输入问题

作者&投稿:子急 (若有异议请与网页底部的电邮联系)
C语言 如何防止输入格式错误~

可以通过scanf来控制输入格式,当scanf返回值不正确时,即为输入格式错误,这时清除输入缓冲,并提示重新输入。

scanf为C语言格式化输入函数,第一个参数为格式化字符串,可以用来确定输入格式。其返回值为正确输入的变量总数,当格式错误时,输入就会产生错误,返回值自然会不正确。于是通过判断返回值,可以知道是否有格式错误出现。

参考代码如下:
int a,b;int ret;//循环输入a,b值。如果格式错误,重新输入。如果得到正确值,终止输入。while(1){ ret = scanf("%d,%d", &a,&b); //必须以逗号分隔。 if(ret != 2)//格式错误。 { fflush(stdin);//清除输入缓冲,抛弃非法字符。 printf("输入格式错误,请重新输入。
");//提示重新输入。 } else break;//输入正确,退出循环。}

我不知道你要问的是不是关于主函数参数的问题、
主函数有两个参数:argc、argv
argc是整形,表示参数个数
argv是字符串数组,存储每一个参数,其中argv[0]为程序名
详细用法可以百度下,不过这要求程序以命令行的方式在命令提示符中启动,在编译器中以调试方式启动或双击可执行程序启动时,argc=1,argv[0]为程序名
。。。。。。。。。。。。
另一种就是程序执行过程中输入命令,并非传递给主函数的参数
这时可以用gets()接收这一行命令,然后用strtok()将接收到的一行命令分割成字符串数组
然后根据数组内容进行相关操作就可以了
、、、、、、、、、、、、
我觉得说的很明白了,不知道是不是你要问的
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
只有Linux里面才有unistd头文件、如果想在vs中使用getopt、根本行不通、就算把头文件粘过来也用不了、只能自己定义getopt函数、然后调用、写getopt需要用到argc和argv、如果你不会写getopt、、、
也许我可以帮帮你、、、、

scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中

你的题目分析如下:
aa后面是空格,所以a1的储存结束,a1=aa
然后bb你按了回车,a2的储存结束,a2=bb

由于你bb完,按了回车,回车留在缓冲区中,然后执行gets(a3),a3遇到缓冲区的回车,a3结束。
然后你按了cc dd 执行gets(a4),a4储存cc dd,由于你回车,a4结束。
然后打印puts会自动换行,一个puts换一行~

scanf语句是可以以空格为作为结束符的,所以aa和bb之间的空格符起了作用,所以a1为aa
a2为bb
下面是MSDN上队char *gets( char *buffer );函数的一个注意事项的描述
The gets function reads a line from the standard input stream stdin and stores it in buffer. The line consists of all characters up to and including the first newline character ('\n'). gets then replaces the newline character with a null character ('\0') before returning the line.
主要内容翻译过来就是,gets函数读取标准输入流stdin然后存储他们到buffer中。一行可以有所有字符组成,包括换行符 ('\n'). 。gets函数在返回时会将换行符替换为结束符null('\0') ;
这就是你的a3为什么是一个null的原因了,因为前面输入时,我们按了键盘上的回车键,它会产生一个换行符,这个换行符被替换为null赋给了a3.

uble型的能用%f输入,编译器会自动提高精度。
float型的也能用%lf输入,但是会有一半的精度丢失。double型的准确有效数字是小数点后16位,float型是7位。如果你输入一个数字,比如1.234567890123,用double型的话会全部输入,但用float型的话从9开始以后的数字就全丢弃了,你再把它打印出来的话你就会发现从第8位以后的都能不是你输入的。


象山县17855331357: C语言 格式输入问题 -
进庾马来: scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车键仍会留在输入的缓冲区中.gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区中 你的题目分析如下:aa后面是空格,所以a1的储存结束,a1=aa 然后bb你按了回车,a2的储存结束,a2=bb 由于你bb完,按了回车,回车留在缓冲区中,然后执行gets(a3),a3遇到缓冲区的回车,a3结束.然后你按了cc dd 执行gets(a4),a4储存cc dd,由于你回车,a4结束.然后打印puts会自动换行,一个puts换一行~

象山县17855331357: c语言输入格式的问题 -
进庾马来: 输入形式:括号数逗号数括号,例如:(2,3)(2.34,5.67)(8,9.12)程序如下,循环输入也没问题.#include <stdio.h>#include <stdlib.h>main(){float x,y;int i;char str[80];for (i=0;i<3;i++){printf("input (x,y), for example (%d,3.45)\n",i+2);gets(str);sscanf(str,"(%f,%f)",&x,&y);printf("I read x=%g y=%g\n",x,y);};}

象山县17855331357: C语言输入格式的问题 -
进庾马来: 我不知道你要问的是不是关于主函数参数的问题、 主函数有两个参数:argc、argv argc是整形,表示参数个数 argv是字符串数组,存储每一个参数,其中argv[0]为程序名 详细用法可以百度下,不过这要求程序以命令行的方式在命令提示符中启...

象山县17855331357: c语言输入的格式问题 -
进庾马来: 应该是输出吧 while(条件语句) {...printf("经济(%d)\n", a); a++;...}

象山县17855331357: C语言格式符问题 -
进庾马来: 一元运算符,就是只有一个操作数(表达式),如逻辑运算符:非(!),实例:!(表达式1)二元运算符,就是只有二个操作数(表达式),如算术运算符:加(+),实例:(表达式1)+(表达式2)三元运算符,就是只有三个操作数(表...

象山县17855331357: c语言问题: 输入格式 输入有多组数据. 每组数据两行. 第一行包含一个正整数n(小于等于1000 -
进庾马来: 1、首先打开visual studio软件,新建一个C语言文件. 2、接着在C语言文件的顶部导入库内容. 3、接着运用scanf函数接收用户输入的字符串. 4、然后我们利用printf函数打印一下用户输入的内容. 5、运行程序以后就会弹出如下图所示的CMD界面,我们输入内容就会自动接收到,然后原样输出内容. 6、最后如果你接收其他的类型,比如整数,那么类型就需要改变成int.

象山县17855331357: 一个很简单的C语言题目,关于格式的问题 -
进庾马来: 如果是present error, for(i=0;i<n-1;i++) printf("%d\n",c[i]); printf("%d",c[i]); 改成 for(i=0;i<n;i++) printf("%d\n",c[i]); 试试,如果是wrong answer,我暂时没办法,我觉得你的算法思路是正确的 ------------------------------------- 重新确认了一下题目,可能是你给的数组太小了,导致溢出,但由于没有超过一定程度,所以只能返回错误结果,而不是runtime error.如果你将a[xx]的xx部分扩大,比如10010(或更大),还是错的,请将题目地址发出来

象山县17855331357: C语言 格式输入scanf函数 中的问题 -
进庾马来: scanf("%d%d%d" -- %d 表示按整型 输入一个数,%d%d%d 表示按整型 输入三个数. scanf("%d%d%d",&a,&b,&c); 后面的 三个参数 &a,&b,&c 表示把依次输入的三个数,按次序 存到 a的地址里,b的地址里,c的地址里.3<回车>4<回车>5<回车> -- 输入的第一个数是 3,第二个数是 4,第三个数是 5.输入数据 的分隔符 是 <回车> 键第一个数是 3,存到 a 第二个数是 4,存到 b 第三个数是 5, 存到 c

象山县17855331357: C语言输入两个数之间是用空格隔开还是用逗号 -
进庾马来: C语言输入两个数之间使用空格隔开还是使用逗号隔开主要取决于你在编写程序时你的scanf语句.具体的区别如下: 1、使用scanf("%d,%d",&a,&b);语句进行输入: 在输入数据时,两个数据中间需要加“,”,如“500,600”. 2、使用scanf(...

象山县17855331357: C语言输入输出格式 -
进庾马来: 在输入时scanf中 %*d 表示跳过此项 也就是说 i 接受值为10 j 跳过20的数 接受的是30 k 根本没有接受值 因为应该是初始值 0 结果为10 30 0

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网