我希望编写一个可以在以下格式的文本文件上实现的代码:
(#)string
int int int
例如:
#wisconsin
20 45 00
#zelda
13 45 20
如何将其扫描到以下结构的数组中:
typedef struct{
char string[99];
int first_int;
int second_int;
int third_int;
} input_t;
我目前的想法是:
input_t mydata[MAX_NAMES];
int count = 0;
while(mydata[count] = scanf("%s %d %d %d", input_t.string,
input_t.first_int, input_t.second_int, input_t.third_int,)){
count++;
}
但这不起作用,我不确定如何使用哈希来识别数据的开头而不将其实际包含在字符串中。
答案 0 :(得分:1)
这大致是我要做的事情:
#include <stdio.h>
typedef struct{
char string[99];
int first_int;
int second_int;
int third_int;
} input_t;
enum { MAX_NAMES = 20 };
int main(void)
{
input_t mydata[MAX_NAMES];
int i;
for (i = 0; i < MAX_NAMES; i++)
{
if (scanf(" #%s %d %d %d", mydata[i].string, &mydata[i].first_int,
&mydata[i].second_int, &mydata[i].third_int) != 4)
break;
}
int count = i;
for (i = 0; i < count; i++)
printf("%s (%d, %d, %d)\n", mydata[i].string, mydata[i].first_int,
mydata[i].second_int, mydata[i].third_int);
return 0;
}
输入文件:
#wisconsin
20 45 00
#zelda
13 45 20
显示的代码产生输出:
wisconsin (20, 45, 0)
zelda (13, 45, 20)
格式字符串中的前导空格是必要的,以便在读取三个整数后跳过留下的换行符。