【问题标题】:fscanf does not read all lines in the filefscanf 不会读取文件中的所有行
【发布时间】:2021-01-22 11:38:16
【问题描述】:
struct soundInput{
    char choice[16];
    char type[7];
    char sound[10];
    char sound2[10];
};

struct soundInput Sound;
FILE *read;
read=fopen("input.txt","r");
fscanf(read,"%s\n",Sound.choice);
printf(Sound.choice);

fscanf 函数从文件中读取数据但只读取 1 行。然后打印过程停止。它只在屏幕上写一行。但是,有超过 20 行。我该如何解决这个错误?

【问题讨论】:

  • 等5分钟我给你密码
  • '%s" 格式说明符在第一个空格处停止。如果您想阅读更多内容,请使用循环或其他方法。此外,您还需要使用"%15s" 来避免缓冲区溢出。
  • fgets 正在读取所有数据。我需要的是在 3 个单独的部分中连续读取 3 条数据。

标签: c scanf


【解决方案1】:

你已经遍历文件读取了文档中的所有行

使用 fgetc 代替 fscanf

FILE *fptr; 
  
char filename[100], c; 
  

  
// Open file 
fptr = fopen(input.txt, "r"); 
if (fptr == NULL) 
{ 
    printf("Cannot open file \n"); 
    exit(0); 
} 
  
// Read contents from file 
c = fgetc(fptr); 
while (c != EOF) 
{ 
    printf ("%c", c); 
    c = fgetc(fptr); 
} 
  
fclose(fptr); 

编辑

FILE* filePointer;
    int bufferLength = 255;
    char buffer[bufferLength];

filePointer = fopen("text.txt", "r");

while(fgets(buffer, bufferLength, filePointer)) {
    printf("%s", buffer);
}

fclose(filePointer);

在这里使用这个代码逐行读取文件,这里该行存储在缓冲区中

【讨论】:

  • ReversePlaylist PrintPlaylist F PrintPlaylist R PlaySong N PlaySong P InsertSong H Song_A InsertSong H Song_B 我需要读取这种数据。我需要每个部分。然后写if else
  • 然后使用 fscanf 遍历文件的每一行,请详细说明您要做什么
  • 我正在编写一个代码,该代码获取保存在输入文件中的信息并读取它,然后将其输入到所需的 if 结构中并进行处理。如果在输入文件中写入了 PLAYSONG H 之类的文本。转到播放歌曲功能。它逐行编写许多命令。像 PLAYSONG,REVERSELIST
  • 在本次作业中,希望开发一个程序来处理编辑播放列表和播放音乐播放器应用程序的歌曲。这个要开发的程序必须读取一个基于文本的输入文件,命名为“input.txt”,每一行对应需要执行的命令,依次执行这个文件中的命令,输出命令将被写入名为“output.txt”的基于文本的输出文件中。
  • 应该写成格式。此外,在将命令产生的输出打印到文件后,它应该将 5 个字符(“*****”)作为新行打印到输出文件。
猜你喜欢
  • 2021-04-09
  • 1970-01-01
  • 2014-05-18
  • 2017-11-18
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
相关资源
最近更新 更多