如何在 c 语言中只读取每行的前 n 个字符?

  • 本文关键字:字符 读取 语言 c stdin
  • 更新时间 :
  • 英文 :


>假设我有一个包含以下内容的文件

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);
}

相关内容

  • 没有找到相关文章

最新更新