我似乎无法弄明白,如何正确读取具有以下外观的.txt文件:(示例)
+ 1
+ 2
- 2
+ 5
p -1
? 5
依旧...... 我现在需要的是存储操作员/令牌,这可以是' +' ' - ' ' P'或类似的东西,以及两个不同变量后面的int,因为我需要稍后检查它们。
char oprtr[1];
int value;
FILE *fp = fopen(args[1], "r");
while(!feof(fp) && !ferror(fp)){
if(fscanf(fp, "%s %d\n", oprtr, &value) < 1){
printf("fscanf error\n");
}
if(strcmp(oprtr, "+") == 0){
function1(bst, value);
} else if(strcmp(oprtr, "-") == 0){
function2(bst, value);
} else if((strcmp(oprtr, "p") == 0) && value == -1){
function3(root);
//some other functions and so on...
}
在循环中打印输出oprtr和值表明它们没有正确显示为红色,但它确实编译了。有人有解决方案吗?
答案 0 :(得分:2)
您有单个字符,可以使用==
来比较它们而不是strcmp
。只需成对阅读输入,例如使用switch
。
char c;
int x;
while(fscanf(fp, "%c %d", &c, &x) == 2)
{ switch(c)
{ case '+': /* ... */
}
}
答案 1 :(得分:1)
你的字符串oprtr
太小了,除了一个空字符串之外什么都不能保留(请记住C字符串需要一个终止0字符!)。所以:
char oprtr[1];
至少需要:
char oprtr[2]; // string of maximum size 1
或更多防守:
char oprtr[256]; // string of maximum size 255
答案 2 :(得分:-1)
您可以使用fscanf函数,您可以从文件中获取输入。
int fscanf(FILE *stream, const char *format, ...);
fscanf(fp," %c %d",&c,&d);