关于C语言中字符串处理函数fgets的用法
如果定义了两个字符数组a[10]b[10]然后连续用两个fgets(a,11,stdin);fgets(b,11,stdin);然后用两个puts依次打印出两个字符数组的...
如果定义了两个字符数组a[10] b[10]
然后连续用两个
fgets(a,11,stdin);
fgets(b,11,stdin);
然后用两个puts依次打印出两个字符数组的内容.
如果第一次输入的时候超过了10个字符(其中没有按回车键).
那么在第一次回车后会显示两个字符串的内容,第一次输入的多于10个的字符保存到了第二个字符数组中。
请问这是为什么?fgets不是行缓冲输入吗?
具体例子如下:
#include"stdio.h"
#include"string.h"
void main()
{
char str1[10];
char str2[10];
fgets(str1,11,stdin);
fgets(str2,11,stdin);
printf("%s\n%s\n",str1,str2);
printf("%c\n",str2[0]);
}
输入asdfasdfasdf123
回车后直接输出两组字符串
asdfasdfas
df123
请具体讲解一下。我是初学的,多包涵啊~在线等 展开
然后连续用两个
fgets(a,11,stdin);
fgets(b,11,stdin);
然后用两个puts依次打印出两个字符数组的内容.
如果第一次输入的时候超过了10个字符(其中没有按回车键).
那么在第一次回车后会显示两个字符串的内容,第一次输入的多于10个的字符保存到了第二个字符数组中。
请问这是为什么?fgets不是行缓冲输入吗?
具体例子如下:
#include"stdio.h"
#include"string.h"
void main()
{
char str1[10];
char str2[10];
fgets(str1,11,stdin);
fgets(str2,11,stdin);
printf("%s\n%s\n",str1,str2);
printf("%c\n",str2[0]);
}
输入asdfasdfasdf123
回车后直接输出两组字符串
asdfasdfas
df123
请具体讲解一下。我是初学的,多包涵啊~在线等 展开
3个回答
展开全部
fgets(str1,11,stdin); -- fgets 从文件输入流读取一行字符串(分隔符是换行键),包括空白到 str1 里。stdin 表示标准输入流,就是键盘输入。11 (实际上用10) 是 最多读入的字符个数。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
推荐于2017-10-15 · 知道合伙人教育行家
关注
展开全部
fgets(str1,11,stdin); -- fgets 从文件输入流读取一行字符串(分隔符是换行键),包括空白到 str1 里。stdin 表示标准输入流,就是键盘输入。11 (实际上用10) 是 最多读入的字符个数。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
当一行(含'\n') 不足11个字符 时,读到 '\n',包括 '\n' ,放入str1
当一行超过10个字符时,只读10个字符,放入str1。
照理你应当声明:
char str1[11] ,str2[11]; 而不是 [10].
---------
当你拍入 1234567890ABCDEFG,这串东西进了 输入缓冲区
fgets(str1 。。)到 输入缓冲区 用去了 1234567890, 还余下 ABCDEFG
fgets(str2 。。)接着 到 输入缓冲区,从余下的东西里 取数。打算 取 11 (实际上用10)个字符,但遇到了 Enter 键,所以 读入的内容是 ABCDEFG
输出语句就不用说了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fgets(char* s, int size, FILE* stream) :
最多在stream中读取size-1个字符存入s指向的缓冲区。
遇到EOF(文件结束符)或'\n'结束,('\n'放入s中)
并在末尾加个\0。
最多在stream中读取size-1个字符存入s指向的缓冲区。
遇到EOF(文件结束符)或'\n'结束,('\n'放入s中)
并在末尾加个\0。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询