【发布时间】:2015-05-06 12:13:05
【问题描述】:
输入文本文件每行有一些数字,数字用空格分隔。前两行只有一个数字,后面几行是三个。我想要做的是读取输入的每一行并存储这些数字。
这是我目前得到的:
int
main(int argc, char *argv[]) {
int n = 0;
char buff[MAX_STRING_LEN]; //MAX_STRING_LEN is defined as 64
while (fgets(buff,MAX_STRING_LEN, stdin) != NULL) {
char temp;
if (n == 0) {
sscanf(buff, "%s", &temp);
int h_num = (int)temp;
} else if (n == 1) {
sscanf(buff, "%s", &temp);
int s_num = (int)temp;
} else {
sscanf(buff, "%s", &temp);
char *token;
token = strtok(&temp, " ");
int i = 0;
int a,b,c;
while (token != NULL) {
if (i == 0) {
a = (int)token;
token = strtok(NULL, " ");
} else if (i == 1) {
b = (int)token;
token = strtok(NULL, " ");
} else {
c = (int)token;
token = strtok(NULL, " ");
}
i++;
}
}
n++;
}
return 0;
}
我用来测试我的代码的打印语句是这样的:
printf("%d\n",h_num);
printf("%d\n%d\n%d\n",a,b,c);
我创建了一个这样的文本文件:
23
34
4 76 91
但输出不是我所期望的,它是我认为的指针的地址。 (我又被指针卡住了=() 有人可以帮我指出问题所在吗?欣赏它。
【问题讨论】:
-
你为什么不用
fscanf(fp, "%d",&num)? -
使用正确的格式字符串对
fscanf进行三次调用就足够了。没有循环,没有strtok,没什么复杂的。 -
您的代码有很多问题。
sscanf(buff, "%s", &temp);尝试使用a = (int)token;等将字符串扫描到char中 -
@CoolGuy 似乎
fscanf要求一个 FILE 指针,那么我该如何使用它来操作每一行? -
您是否正在重定向来自文件的输入?如果是这样,请使用
fscanf(stdin, "%d",&num)