从文件中读取随机输入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从文件中读取随机输入相关的知识,希望对你有一定的参考价值。
我有一个文件,我想从文件中读取一些随机输入,我不想使用getline
或类似的东西,扫描工作,但它读取一些随机的东西,如null或不同的字符。我认为问题可能是当我正在阅读一个角色时,这可能会破坏这一切。
这是一些代码,看看我做了什么:
#include <stdio.h>
#include <stdlib.h>
typedef struct queries
{
char type;
int node;
char *addr;
} Queries;
int main()
{
int i;
FILE *f;
f = fopen("queries.in", "r");
if (!f)
{
fprintf(stderr, "File queries.in was not opened correctly.
");
exit(1);
}
int n_queries;
fscanf(f, "%d
", &n_queries);
Queries *q = (Queries*)malloc(n_queries*sizeof(struct queries));
for (i = 0; i < n_queries; ++i)
{
fscanf(f, "%c ", &q[i].type);
if(q[i].type == 'q') fscanf(f, "%d %s
", &q[i].node, q[i].addr);
else fscanf(f, "%d
", &q[i].node);
}
for (i = 0; i < n_queries; ++i)
{
printf("%d %c ", i, q[i].type);
if(q[i].type == 'q') printf("%d %s
", q[i].node, q[i].addr);
else printf("%d
", q[i].node);
}
fclose(f);
}
这是输入:
8
q 0 addr2
q 0 addr1
q 0 addr1
q 1 addr4
q 1 addr1
q 1 addr2
f 4
q 1 addr4
预期的输出:
8
q 0 addr2
q 0 addr1
q 0 addr1
q 1 addr4
q 1 addr1
q 1 addr2
f 4
q 1 addr4
实际产量:
0 q 0 (null)
1 a 0
2 d 0
3 d 0
4 r 2
5 q 0 (null)
6 a 0
7 d 0
我不知道是怎么回事
答案
当你进入q[i].addr
时,还没有任何记忆分配给q[i].addr
。现在任何事情都可能发生,因为字符串放在不属于你的内存中。
您还应该检查fscanf的返回值,以便正确读取数据。
以上是关于从文件中读取随机输入的主要内容,如果未能解决你的问题,请参考以下文章