#include <stdioh>
int main()
{
char i,ch[10]={0};
int ret=0;
printf("请输入10个字符,按回车结束(可以输入数字、大小写字母、空格、回车)\n");
//参数: %10[0-9 A-Za-z]s
//10表示只接收10个数组
//[0-9 A-Za-z]表示只接受:数字0-9、空格、26个大小写字母,其它视为无效数据
//未尾的s,表示读取字符串
ret=scanf("%10[0-9 A-Za-z\n]s",&ch); //这样就可以接受回车,以字符串长度+回车表示输入结束
// ret=scanf("%10[0-9 A-Za-z]s",&ch); //这样是以回车为输入结束
printf("\n%s\n",ch);
//如果返回-1,表示错误退出或者用户中断(Ctrl+Z Ctrl+D)。
//如果返回0,表示没有读取到任何数据
//如果返回1,表示成功读入数据
//判断返回值 ret 是 -1 就表示中断退出
//判断返回值 ret = 1,并且 ch 数据中的数据
//如果是 10 表示回车
//如果是 32 表示空格
if( ret == -1 )
{
printf("无效输入或者用户中断\n");
}
else
{
for(i=0;i<10;i++)
{
if( ch[i]==32)
{
printf("第 %d 个字符为 空格。\n",i+1);
}
else if( ch[i]==10)
{
printf("第 %d 个字符为 回车。\n",i+1);
}
}
}
return 0;
}
它是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。按格式的要求,每个变量前都要有地址符,故s1和s2前面都需要用到地址符&。A、B、D选项中都不能满足s1、s2前面都有&的要求,所以C为正确答案。用软件运行C选项的代码,编译中0个错误,0个警告,验证C答案正确。
扩展资料:
scanf()是C语言中的一个输出函数。与printf函数一样,都被声明在头文件stdioh里,因此在使用scanf函数时要加上#include <stdioh>。
scanf()函数的指定输入格式有很多种,下面是一些比较常用的格式:
%d:读入可选有符号的十进制整数。
%u:读入无符号符号十进制整数。
%a,e,f,g,A,E,F,G: 读入可选有符号浮点数,输入格式应该像strtod函数识别的字符序列一样。
%o:读入可选有符号八进制整数。
%s:读入一个的字符序列,后面会加上空字节,遇到空白字符(\t \r \n 空格等)完成读取。
getchar()
getchar()是stdioh中的库函数,它的作用是从stdin流中读入一个字符,如果stdin有数据的话不用输入它就可以直接读取了。
for(int i=0;i<10;++i)
{
char ch=getchar();
printf ( "ch=%c\n", ch );
}当输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取,并显示到屏幕上。
如果我想让getchar()每次都能够等待用户输入的话就要清空缓冲区,
C标准规定
fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了
fflush(
stdin
)的实现,比如微软的VC。其它编译器是否也定义了
fflush(
stdin
)的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用
fflush(
stdin
)来刷新输入缓存。对于没有定义
fflush(
stdin
)的编译器,可以使用
fgets()函数来代替它(比用
getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状态。(这个是任何平台下都可以的)
for(int i=0;i<10;++i)
{
char ch=getchar();
fflush(stdin); //每次都会有等待状态了(VC平台)
printf ( "ch=%c\n", ch );
} scanf()scanf这个库函数比较奇怪,而且存在一定的缺陷,所以很多人都不用了。
scanf输入字符串,整型,实型等数据判断的方式都一样,回车,空格,tab键都认为是一个数据的结束,当然字符的话,一个字符就是结束了,回车,空格等都有对应的ascii码,所以用scanf输入字符时要小心这些东东被当成字符输进去,而输入字符串和整型,实型等数据时这些都被当成分隔符而不会被输入到字符数组或变量里。
1scanf不能接受空格、制表符Tab、回车等;对末尾回车符的处理:把回车符保留在缓存中。
gets能够接受空格、制表符Tab和回车等;对末尾回车符的处理:接收回车,但把回车替换为\0。
2scanf :当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。
gets:可接受回车键之前输入的所有字符,并用'\n'替代 '\0'回车键不会留在输入缓冲区中
3gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读 *** 作时不发生溢出。scanf()可以读取所有类型的变量。
扩展资料:
注意问题
(1)在高版本的 Visual Studio 编译器中,scanf 被认为是不安全的,被弃用,应当使用scanf_s代替 scanf。
(2) 对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&" *** 作符。
(3) 可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读 *** 作中的最大位数。
(4) scanf函数中没有类似printf的精度控制。
(5) scanf中要求给出变量地址,如给出变量名则会出错
(6) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
(7) 在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
参考资料:
-scanf
-gets
C语言中scanf是标准库函数,主要用来接收用户输入的数据。
C标准函数库是所有符合标准的头文件的集合,以及常用的函数库实现程序,例如I/O输入输出和字符串控制。不像这三种COBOL、Fortran和PL/I等编程语言,在C语言的工作任务里不会包含嵌入的关键字,所以几乎所有的C语言程序都是由标准函数库的函数来创建的。
C语言简介
C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件。
scanf返回值表示成功读入的数据个数。如果遇到文件结束符(end of file,EOF,控制台下用Ctrl+Z输入)则返回EOF(stdioh中定义符号常量:#define EOF -1)。
C标准中并没有定义非法输入时scanf的准确行为。一般来说,非法输入会导致跳过当前数据的读取,但不会终止scanf函数。由于scanf要从键盘缓冲区读取输入数据,而缓冲区在一次非法读入后并未清空,因此有可能出现始终无法读取数据而死循环的情况。
可以参考这里:http://blogcsdnnet/mouse3d/articles/582942aspx。
scanf 函数最主要的用法是:
scanf("输入控制符", 输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。
扩展资料:
使用scanf()函数需要注意的问题:
1对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&" *** 作符。
2可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读 *** 作中的最大位数。
3scanf函数中没有类似printf的精度控制。
如:scanf("%52f",&a); 是非法的。不能企图用此语句输入小数为2位的实数。
4scanf中要求给出变量地址,如给出变量名则会出错
如:scanf("%d",a);是非法的,应改为scanf("%d",&a);才是合法的。
5在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
6在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
参考资料:
-scanf()函数
-gets()函数
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)