scanf()函数和gets()函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hihello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。charstring[15];gets(string);/*遇到回车认为输入结束*/scanf("%s",string);/*遇到空格认为输入结束*/所以在输入的字符串中包含空格时,应该使用gets输入。scanf和gets获取字符串时的区别在C语言中,能构获取字符串的函数至少有两个:1.scanf()所在头文件:stdio.h语法:scanf("格式控制字符串",变量地址列表);接受字符串时:scanf("%s",字符数组名或指针);2.gets()所在头文件:stdio.h语法:gets(字符数组名或指针);两者在接受字符串时:1.不同点:scanf不能接受空格、制表符Tab、回车等;而gets能够接受空格、制表符Tab和回车等;2.相同点:字符串接受结束后自动加'\0'。例1:#include<stdio.h>main(){charch1[10],ch2[10];scanf("%s",ch1);gets(ch2);}依次键入asd空格fg回车,asd空格fg回车,则ch1="asd\0",ch2="asdfg\0"。例2:#include<stdio.h>main(){charch1[10],ch2[10],c1,c2;scanf("%s",ch1);c1=getchar();gets(ch2);c2=getchar();}依次键入asdfg回车,asdfg回车,则ch1="asdfg\0",c1='\n',ch2="asdfg\0",c2需输入。scanf:当遇到回车,空格和tab键会自动在字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区中。gets:可接受回车键之前输入的所有字符,并用'\n'替代'\0'.回车键不会留在输入缓冲区中gets()用到读取字符串,用回车结束输入scanf()可以读取所有类型的变量
gets函数和scanf函数都可以作为字符串的输入函数,相同点:都是将从键盘输入的字符串存入数组中,输入完成后要以回车来结束输入。不同点:利用sanf时,在输入过程中碰到空格时系统认为输入结束,并将空格之前的字符作有效字符。所以要把空格用scanf输入。我没有学过
不要用scanfscanf一样有风险自己写一个safe_gets(char*s,intmax_len,charend_c)通过getchar循环获取字符,当获取到end_c或者达到max_len时结束很简单也很好用