>假设我有一个包含以下内容的文件
abcdefghijkl
mnopqrstuvwx
yz1234567890
我只想从每行中读取前 5 个字符,因此它可以如下所示:
abcde
mnopq
yz123
我尝试了以下解决方案,
char line[5];
for (int i = 0; i < 5; i++){
char c = getchar();
line[i] = c;
printf("%c", line[i]);
}
但它不起作用。我该如何解决这个问题?
这是一个演示程序。为简单起见,使用了标准输入流stdin
而不是外部文件。
#include <stdio.h>
#include <string.h>
int main(void)
{
char line[6];
while ( fgets( line, sizeof( line ), stdin ) != NULL )
{
char *p = strchr( line, 'n' );
if ( !p ) fscanf( stdin, "%*[^n]n" );
else *p = ' ';
puts( line );
}
return 0;
}
如果输入
abcdefghijkl
xyz
mnopqrstuvwx
yz1234567890
然后输出将是
abcde
xyz
mnopq
yz123
您发布的代码将从 stdin 读取 5 个字节并打印出来。此代码应该有效。
代码的问题可能是,在读取具有相同循环的下一行之前,您没有丢弃该行的剩余字符。由于您没有发布调用循环的代码,因此我无法知道。
简单函数 https://godbolt.org/z/2UP4JW
#include <stdio.h>
#include <stdint.h>
char *read5chars(char *buff, FILE *fp)
{
int ch;
char *ret;
ret = fgets(buff, 6, fp);
do
{
ch = fgetc(fp);
}while(ch != 'n' && ch != EOF);
return ret;
}
int main()
{
char line[6];
while(read5chars(line, stdin))
printf("%sn", line);
}