在C语言中读取令牌时遇到问题

时间:2015-01-21 10:56:21

标签: c

我似乎无法弄明白,如何正确读取具有以下外观的.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和值表明它们没有正确显示为红色,但它确实编译了。有人有解决方案吗?

3 个答案:

答案 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);