文件C中的结构fscanf
在文件中,我需要读取一些输入: 这是一个例子:文件C中的结构fscanf,c,arrays,file,C,Arrays,File,在文件中,我需要读取一些输入: 这是一个例子: 8 15 [1,1] v=5 s=4#o [4,2] v=1 s=9#x 问题是它无法正确读取此处的输入:[1,1]v=5s=4o 我使用printf的最后一行显示了一些随机数。我使用printf的最后一行显示了一些随机数 您看到的随机数是因为要打印的缓冲区尚未正确填充 此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧 int main(void)//minimum signature fo
8 15
[1,1] v=5 s=4#o
[4,2] v=1 s=9#x
问题是它无法正确读取此处的输入:[1,1]v=5s=4o
我使用printf的最后一行显示了一些随机数。我使用printf的最后一行显示了一些随机数
您看到的随机数是因为要打印的缓冲区尚未正确填充
此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧
int main(void)//minimum signature for main includes 'void'
{
int r = 0;
int s = 0;
char line[80] = {0};//{initializer for arrays}
int p = 0;
Tunel *tuneli = malloc(sizeof(*tuneli)*50);
if(tuneli)//always test return of malloc before using it
{
FILE *fin = fopen(".\\farbanje.txt", "r");
if(fin)//always test return of fopen before using it
{
fgets(line, sizeof(line), fin);
sscanf(line, "%d %d", &r, &s);
while(fgets(line, sizeof(line), fin))
{
sscanf(line, " [%d,%d]", &tuneli[p].red2, &tuneli[p].stupac2);
//note space ^ here to read only visible characters
printf("[%d,%d]\n", tuneli[p].red2, tuneli[p].stupac2);//content is now populated corretly
p++;
}
fclose(fin);//close when finished
}
free(tuneli);//free when done to prevent memory leaks
}
return 0;
}
我使用printf的最后一行显示了一些随机数
您看到的随机数是因为要打印的缓冲区尚未正确填充
此示例显示如何读取文件,使用读取行缓冲区,然后使用解析行中的前两个值。阅读代码注释了解其他一些技巧
int main(void)//minimum signature for main includes 'void'
{
int r = 0;
int s = 0;
char line[80] = {0};//{initializer for arrays}
int p = 0;
Tunel *tuneli = malloc(sizeof(*tuneli)*50);
if(tuneli)//always test return of malloc before using it
{
FILE *fin = fopen(".\\farbanje.txt", "r");
if(fin)//always test return of fopen before using it
{
fgets(line, sizeof(line), fin);
sscanf(line, "%d %d", &r, &s);
while(fgets(line, sizeof(line), fin))
{
sscanf(line, " [%d,%d]", &tuneli[p].red2, &tuneli[p].stupac2);
//note space ^ here to read only visible characters
printf("[%d,%d]\n", tuneli[p].red2, tuneli[p].stupac2);//content is now populated corretly
p++;
}
fclose(fin);//close when finished
}
free(tuneli);//free when done to prevent memory leaks
}
return 0;
}
同意使用FGET更好 但是如果你想继续使用你目前的方法
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int red2;
int stupac2;
int visina;
int sirina;
char boja[10];
}Tunel;
int main(){
int r, s, i;
FILE*fin=fopen("farbanje.txt", "r");
if(fin==NULL) {
printf("error reading file\n");
return 1;
}
Tunel *tuneli=(Tunel*)malloc(sizeof(Tunel)*50);
fscanf(fin,"%d %d\n", &r,&s);
printf("%d %d", r,s);
int p=0;
while (fscanf(fin, " [%d,%d]%*[^\n]", &tuneli[p].red2, &tuneli[p].stupac2) == 2)
{
p++;
}
fclose(fin);
for(i=0;i<p;i++)
{
printf("[%d,%d]", tuneli[i].red2, tuneli[i].stupac2);
}
}
同意使用FGET更好 但是如果你想继续使用你目前的方法
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int red2;
int stupac2;
int visina;
int sirina;
char boja[10];
}Tunel;
int main(){
int r, s, i;
FILE*fin=fopen("farbanje.txt", "r");
if(fin==NULL) {
printf("error reading file\n");
return 1;
}
Tunel *tuneli=(Tunel*)malloc(sizeof(Tunel)*50);
fscanf(fin,"%d %d\n", &r,&s);
printf("%d %d", r,s);
int p=0;
while (fscanf(fin, " [%d,%d]%*[^\n]", &tuneli[p].red2, &tuneli[p].stupac2) == 2)
{
p++;
}
fclose(fin);
for(i=0;i<p;i++)
{
printf("[%d,%d]", tuneli[i].red2, tuneli[i].stupac2);
}
}
顶部的示例是您正在读取的文件的内容吗?如果你想从文件中读取int,你必须先进行一些解析,将数字与其他字符分开。你可能想使用一些库,也许上面的示例就是你正在读取的文件的内容?如果你想从文件中读取int,你必须先做一些解析,把数字和其他字符分开