我正在做一个uni项目,它必须读取.txt格式的多行输入序列。这是我第一次体验C,所以我不太了解用fscanf读取文件然后处理它们。我写的代码是这样的:
#include <stdio.h>
#include <stdlib.h>
int main() {
char tipo [1];
float n1, n2, n3, n4;
int i;
FILE *stream;
stream=fopen("init.txt", "r");
if ((stream=fopen("init.txt", "r"))==NULL) {
printf("Error");
} else {
i=0;
while (i<4) {
i++;
//i know i could use a for instead of a while
fscanf(stream, "%s %f %f %f %f%", &tipo, &n1, &n2, &n3, &n4);
printf("%s %f %f %f %f", tipo, n1, n2, n3, n4);
}
}
return 0;
}
我的&#34; init&#34;文件的格式如下:
L 150.50 165.18 182.16 200.50
G 768.12 876.27 976.56 958.12
A 1250.15 1252.55 1260.60 1265.15
L 200.50 245.30 260.10 275.00
A 1450.15 1523.54 1245.17 1278.23
G 958.12 1000.65 1040.78 1068.12
我不知道如何告诉程序在读完第一行后跳过一行。
提前感谢您的帮助!
答案 0 :(得分:0)
使用fscanf(stream, "%*[^\n]\n")
跳过行。只需添加一个if
语句即可检查要跳过的行号。 if (i == 2)
跳过第二行。
同时将char tipo[1]
更改为char tipo
,并在printf
和fscanf
while (i++ < 4)
{
if (i == 2) // checks line number. Skip 2-nd line
{
fscanf(stream, "%*[^\n]\n");
}
fscanf(stream, "%c %f %f %f %f\n", &tipo, &n1, &n2, &n3, &n4);
printf("%c %f %f %f %f\n", tipo, n1, n2, n3, n4);
}
你也是两次打开文件。 if(streem = fopen("init.txt", "r") == NULL)
将成立,因为您已经打开了文件。
答案 1 :(得分:0)
回应&#34; 我不知道如何告诉程序在读完第一行后跳过一行。&#34;就这样做!
while (i<4)
{
i++;
//i know i could use a for instead of a while
fscanf(stream, "%s %f %f %f %f%", &tipo, &n1, &n2, &n3, &n4);
if(i != 2) //skipping second line
printf("%s %f %f %f %f", tipo, n1, n2, n3, n4);
}
使用1元素阵列也没有意义。如果您希望仅使用char
元素,请将其从char tipo [1];
更改为char tipo;
,并将其"%s"
更改为"%c"
。但是,如果您希望它是string
元素:将其从char tipo [1];
更改为char *tipo;
或char tipo [n];
并保留"%s"
。
答案 2 :(得分:-1)
当您只阅读一个字符时,没有理由使用字符数组(字符串)。
这样做:
char tipo;
和
fscanf(stream, "%c %f %f %f %f%", &tipo, &n1, &n2, &n3, &n4);
你的代码应该可行。注意c而不是s。