我可以使用 fgets 从键盘读取多行吗?
Can I read multiple lines from keyboard with fgets?
我试图从 C 中的标准输入(我的键盘)读取几行,但我无法做到这一点。
我的输入是这样的:
3
first line
second line
third line
这是我的代码:
char input[2], s[200];
if (fgets(input, 2, stdin) != NULL) {
printf("%d\n", input[0]);
for (int i = 1; i <= input[0] - '0'; i++) {
if (fgets(s, 20, stdin) != NULL)
printf("%d\n", s[1]);
}
}
似乎这个函数“fgets”正在读取我的新行字符,用 ASCII 编码为 10。
顺便说一句,我是 运行 我在 linux 终端中的代码。
I am trying to read a few lines from stdin (my keyboard) in C, and I
wasn't able to do this.
原因:
printf("%d\n", input[0]);
此语句打印一个额外的 \n
,它在第一次迭代期间由 fgets
读取。因此,s
将在第一次迭代中存储 \n
。使用 getchar()
阅读额外的 \n
.
fgets(s, 20, stdin)
,你正在读取20个字节,但输入的字符串(第二个)占用了20多个字节。增加它。
printf("%d\n", s[1]);
改为printf("%s\n", s);
密码是:
#include <stdio.h>
#include <string.h>
int main()
{
char input[2], s[200];
if (fgets(input, 2, stdin) != NULL)
{
printf("%d\n", (input[0]- '0'));
getchar(); // to read that extra `\n`
for (int i = 1; i <= (input[0] - '0'); i++)
{
if (fgets(s, 50, stdin) != NULL) // increase from 20 to 50
printf("%s\n", s); // printing string
}
}
return 0;
}
输出为:
3
3
this is first line
this is first line
this is the second line
this is the second line
this is the third line
this is the third line
我试图从 C 中的标准输入(我的键盘)读取几行,但我无法做到这一点。
我的输入是这样的:
3
first line
second line
third line
这是我的代码:
char input[2], s[200];
if (fgets(input, 2, stdin) != NULL) {
printf("%d\n", input[0]);
for (int i = 1; i <= input[0] - '0'; i++) {
if (fgets(s, 20, stdin) != NULL)
printf("%d\n", s[1]);
}
}
似乎这个函数“fgets”正在读取我的新行字符,用 ASCII 编码为 10。 顺便说一句,我是 运行 我在 linux 终端中的代码。
I am trying to read a few lines from stdin (my keyboard) in C, and I wasn't able to do this.
原因:
printf("%d\n", input[0]);
此语句打印一个额外的\n
,它在第一次迭代期间由fgets
读取。因此,s
将在第一次迭代中存储\n
。使用getchar()
阅读额外的\n
.fgets(s, 20, stdin)
,你正在读取20个字节,但输入的字符串(第二个)占用了20多个字节。增加它。printf("%d\n", s[1]);
改为printf("%s\n", s);
密码是:
#include <stdio.h>
#include <string.h>
int main()
{
char input[2], s[200];
if (fgets(input, 2, stdin) != NULL)
{
printf("%d\n", (input[0]- '0'));
getchar(); // to read that extra `\n`
for (int i = 1; i <= (input[0] - '0'); i++)
{
if (fgets(s, 50, stdin) != NULL) // increase from 20 to 50
printf("%s\n", s); // printing string
}
}
return 0;
}
输出为:
3
3
this is first line
this is first line
this is the second line
this is the second line
this is the third line
this is the third line