C语言中gets函数能否只接收一个换行符 如gets(a),输入时输入回车
#include<stdio.h>main(){chara1[5],a2[5],a3[5],a4[5];scanf("%s%s",a1,a2);gets(a3);gets...
#include<stdio.h>
main()
{char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);
puts(a3);puts(a4);
}
键盘输入:
aa bb<回车>
cc dd<回车>
为何输出结果是:
aa
bb
cc dd 展开
main()
{char a1[5],a2[5],a3[5],a4[5];
scanf("%s%s",a1,a2);
gets(a3);gets(a4);
puts(a1);puts(a2);
puts(a3);puts(a4);
}
键盘输入:
aa bb<回车>
cc dd<回车>
为何输出结果是:
aa
bb
cc dd 展开
8个回答
展开全部
由于scanf函数遇到空格后就停止输入,如需要输入一句话的话,要尝试其他的函数例如gets()函数。
原型函数为char *gets(char*buffer),返回一个指向char的指针,返回的指针与传递给他的指针是同一个指针。
例子:
char name[20];
gets(name);
printf(“%s”,name);
此时在控制界面中输入hello world,输出将会是hello world。
上例同时也可以写成:
char name[20];
char *ptr;
ptr=gets(name);
printf(“%s”,name);
printf(“%s”,ptr);
此时两句话输出的都是hello world,从而证明ptr的指针就是赋给gets函数的指针。但是gets()函数有一个缺点,当输入的字符串的长度大于申请的空间时,会造成空间越界,此时在函数执行结束释放空间时会报错。
扩展资料
1、输出字符串的效果,宽度和精度同样也适用于字符串。
3、put是需要遇到’\0’才会输出的,因此通过字符串数组遍历赋值时,不要忘记加’\0’。
推荐于2017-11-06
展开全部
注意这点,gets()函数会读取一行字符,直到遇到换行符'\n为止,并且这个换行符不会读取到数组中。
scanf("%s%s",a1,a2);
这一行把aa和bb读取并分别保存到a1和a2数组中,但是会把回车符留在缓冲区中。
gets(a3);gets(a4);
这里的gets(a3)会读取这个回车符,但是不会把回车符保存到a3数组,所以a3数组内容不会改变,接下来的gets(a4)将以回车结尾的cc dd读取并保存到a4中
puts(a1);puts(a2);
分别在单独的行中输出a1和a2字符串。
puts(a3);puts(a4);
分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。
scanf("%s%s",a1,a2);
这一行把aa和bb读取并分别保存到a1和a2数组中,但是会把回车符留在缓冲区中。
gets(a3);gets(a4);
这里的gets(a3)会读取这个回车符,但是不会把回车符保存到a3数组,所以a3数组内容不会改变,接下来的gets(a4)将以回车结尾的cc dd读取并保存到a4中
puts(a1);puts(a2);
分别在单独的行中输出a1和a2字符串。
puts(a3);puts(a4);
分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
gets()读不到换行符,读取的换行符被转换为null值,并由此来结束字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用WXD11011的回答:
注意这点,gets()函数会读取一行字符,直到遇到换行符'\n为止,并且这个换行符不会读取到数组中。
scanf("%s%s",a1,a2);
这一行把aa和bb读取并分别保存到a1和a2数组中,但是会把回车符留在缓冲区中。
gets(a3);gets(a4);
这里的gets(a3)会读取这个回车符,但是不会把回车符保存到a3数组,所以a3数组内容不会改变,接下来的gets(a4)将以回车结尾的cc dd读取并保存到a4中
puts(a1);puts(a2);
分别在单独的行中输出a1和a2字符串。
puts(a3);puts(a4);
分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。
注意这点,gets()函数会读取一行字符,直到遇到换行符'\n为止,并且这个换行符不会读取到数组中。
scanf("%s%s",a1,a2);
这一行把aa和bb读取并分别保存到a1和a2数组中,但是会把回车符留在缓冲区中。
gets(a3);gets(a4);
这里的gets(a3)会读取这个回车符,但是不会把回车符保存到a3数组,所以a3数组内容不会改变,接下来的gets(a4)将以回车结尾的cc dd读取并保存到a4中
puts(a1);puts(a2);
分别在单独的行中输出a1和a2字符串。
puts(a3);puts(a4);
分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。
展开全部
最后一句应该有问题:分别在单独的行中输出a3和a4字符串。由于a3没有赋值,所以它依然保持在定义时的随机值。
a3赋值了吧? 第一个元素a3[0] 变成了‘\0’字符了吧?所以打印a3的时候不是一串垃圾值
而是空行。
a3赋值了吧? 第一个元素a3[0] 变成了‘\0’字符了吧?所以打印a3的时候不是一串垃圾值
而是空行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询