C语言中两种方法都可以,但有区别scanf("%s",s)是读取不到空格的。而gets(s)可以读取。
创新互联致力于网站制作、成都网站建设,成都网站设计,集团网站建设等服务标准化,推过标准化降低中小企业的建站的成本,并持续提升建站的定制化服务水平进行质量交付,让企业网站从市场竞争中脱颖而出。 选择创新互联,就选择了安全、稳定、美观的网站建设服务!
两种方法都是一个一个字符读取的。不同的是scanf是遇到空格或者回车键就会结束,但gets是只有输入回车键才会终止读取字符串!下面是例子:
#include stdio.h
int main()
{
char x[10];
scanf("%s",x);
printf("%s",x);
return 0;
}
下面是gets;
#include stdio.h
int main()
{
char x[10];
gets(x);
printf("%s",x);
return 0;
}
你输入的\0被认为是2个字符。
'\\'和'0',不是'\0'
至于输入abcdefghij时出问题,那是数组边界问题。
用字符数组保存字符串时,要预留一个数组成员,用来保存结尾符号'\0'。
所以char[10]只能保存长度为9的字符串。
printf输出字符串的时候,只有遇到'\0'才会停止输出。
'\0'的值就是0.它会一直输出直到在后面连续的内存里遇到'\0'
c语言是函数式语言,所以函数很重要,举个例子 #includestdio.h int abc(int a ,int b) /* abc 前的 int 表示这个函数的返回值是整数,abc 是函数名称,括号里的是定义了两个参数它们都是整数*/ { int a=123; printf("%d",a); } 这个是我们自己写的函数,还有现成的c库函数,直接调用就行,限于篇幅,其实你仔细的抠书,书上都有,我就是看书学会的
C语言输入输出函数有很多,bai标准I/O函数du中包含了如下几个常用的函数:
scanf,printf,getc,putc,getchar,putchar,gets,puts,fgets,fputs,fgetc,fputc,fscanf,fprintf等.
int scanf(const char *format, arg_list)
scanf主要从标准zhi输入流中获取dao参数值,format为指定的参数格式及参数类型,如scanf("%s,%d",str,icount);
它要求在标准输入流中输入类似"son of bitch,1000"这样的字符串,同时程序会将"son of bitch"给str,1000给icount.
scanf函数的返回值为int值,即成功赋值的个数,在上例中如果函数调用成功,则会返回2,所以我们在写程序时,可以通过
语句if(scanf("%s,%d",str,icount) != 2){...}来判断用户输入是否正确.
int printf(const char *format, arg_list)
printf主要是将格式化字符串输出到标准输出流中,在stdio.h头文件中定义了标准的输入和输出,分别是stdin,stdout.
arg_list可以是变量名,也可以是表达式,但最终都会以值的形式填充进format中.
int getc(FILE *fp)
getc主要是从文件中读出一个字符.常用的判断文件是否读取结束的语句为:(ch = getc(fp)) != EOF.EOF为文件结束标志,
定义在stdio.h中,就像EXIT_SUCCESS,EXIT_FAILURE定义在stdlib.h中一样,文件也可以被理解为一种流,所以当fp为stdin
时,getc(stdin)就等同于getchar()了.
int putc(int ch,FILE *fp)
putc主要是把字符ch写到文件fp中去.如果fp为stdout,则putc就等同于putchar()了.
int getchar(void)
getchar主要是从标准输入流读取一个字符.默认的标准输入流即stdio.h中定义的stdin.但是从输入流中读取字符时又
涉及到缓冲的问题,所以并不是在屏幕中敲上一个字符程序就会运行,一般是通过在屏幕上敲上回车键,然后将回车前的字符
串放在缓冲区中,getchar就是在缓冲区中一个一个的读字符.当然也可以在while循环中指定终止字符,如下面的语句:
while ((c = getchar()) != '#')这是以#来结束的.
int putchar(int ch)
putchar(ch)主要是把字符ch写到标准流stdout中去.
char * gets(char *str)
gets主要是从标准输入流读取字符串并回显,读到换行符时退出,并会将换行符省去.
int puts(char *str)
puts主要是把字符串str写到标准流stdout中去,并会在输出到最后时添加一个换行符.
char *fgets(char *str, int num, FILE *fp)
str是存放读入的字符数组指针,num是最大允许的读入字符数,fp是文件指针.fgets的功能是读一行字符,该行的字符数
不大于num-1.因为fgets函数会在末尾加上一个空字符以构成一个字符串.另外fgets在读取到换行符后不会将其省略.
int fputs(char *str, file *fp)
fputs将str写入fp.fputs与puts的不同之处是fputs在打印时并不添加换行符.
int fgetc(FILE *fp)
fgetc从fp的当前位置读取一个字符.
int fputc(int ch, file *fp)
fputc是将ch写入fp当前指定位置.
int fscanf(FILE *fp, char *format,...)
fscanf按照指定格式从文件中出读出数据,并赋值到参数列表中.
int fprintf(FILE *fp, char *format,...)
fprintf将格式化数据写入流式文件中.
scanf 函数最主要的用法是:
scanf("输入控制符", 输入参数);
功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。
用scanf()函数以%s格式读入的数据不能含有空白符时,所有空白符都被当做数据结束的标志。所以题中函数输出的值只有空格前面的部分。
如果想要输出包括空格在内的所有数据,可以使用gets()函数读入数据。gets()函数的功能是读取字符串,并存放在指定的字符数组中,遇到换行符或文件结束标志时结束读入。换行符不作为读取串的内容,读取的换行符被转换为字符串结束标志'\0'。
扩展资料:
使用scanf()函数需要注意的问题:
1.对于字符串数组或字符串指针变量,由于数组名可以转换为数组和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上""操作符。
2.可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。
3.scanf函数中没有类似printf的精度控制。
如:scanf("%5.2f",a); 是非法的。不能企图用此语句输入小数为2位的实数。
4.scanf中要求给出变量地址,如给出变量名则会出错
如:scanf("%d",a);是非法的,应改为scanf("%d",a);才是合法的。
5.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。
C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
6.在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。
参考资料:
百度百科-scanf()函数
百度百科-gets()函数
2.putchar() getchar() 输出输入函数只针对单个字符的操作。3.puts(),gets() 输出输入函数可以单个字符操作(但是功能有限的),主要是针对字符串操作。 下面我们定义int a用scanf("%d",a)可以获取整型a的值,a=getchar(),gets(a)无法从键盘获取数字用printf("%d",a)可以打印数字a的值,putchar(a),puts(a)没法打印数字方面:printf()和scanf()胜char a用scanf("%c",a) 可以获取字符a的值,用a=getchar()能获取a的值,用gets(a)不能获取用printf("%c",a)可以打印字符a的值 用a=getchar()可以打印a的值,用puts(a)不能打印字符方面:getchar()和putchar()第1 scanf()和printf()第2 gets和puts()败补充:puts()和gets()能接收和打印单个字符只限制变量是数组变量例如 char a[50]; gets(a); put(a);你输入一个字符就会打印一个字符但如果是字符变量 char a='x'; char a; puts(a); 或 gets(a); puts(a);就无法运行char a[50]用scanf("%s",a)能获取数组a的值,用a=getchar()无法获取,用gets(a)能获取a的值用printf("%s",a)能打印数组a的值 用putchar(a)无法打印,用puts(a)能打印a的值字符串(数组)方面:gets()和puts()第一,scanf()和printf()第2,getchar()和putchar()败可见scanf()和printf()什么都能实现,但对字符和字符串操作没有其他两种好getchar()和putchar()对字符操作优势明显,但不能操作数字变量,字符数组变量gets()和puts()对字符串操作优势明显,但也不能操作数字变量,字符变量scanf()和printf()格式输入输出能同时按格式一起输入输出字符,数字,字符串这是其他两种不能比的所以程序以scanf()和printf()为主,其他两种作为辅助,发挥各自的长处。最后来个总结,用程序表示#include stdio.hmain(){ char a,b[50]; printf("请输入第一个字符:\n"); scanf(" %c",a); getchar(); //获取前面的回车 printf("第一个的字符为:%c\n",a); printf("请输入第二个字符:\n"); a=getchar(); printf("第二个字符为:"); putchar(a); putchar('\n'); printf("请输入第一个字符串:\n"); scanf(" %s",b); getchar(); //获取前面的回车 printf("第一个的字符为:%s\n",b); puts("请输入第二个字符串:"); gets(b); puts("第二个字符串为:"); puts(b); }