c - 无法读取 C 中的 token

标签 c

我似乎无法弄清楚,如何正确读取具有以下外观的 .txt 文件:(示例)

+ 1
+ 2
- 2
+ 5
p -1
? 5

等等... 我现在需要的是存储运算符/ token ,它可以是 '+' '-' '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 和 value 表明它们没有正确地显示为红色,但它确实可以编译。有人有解决方案吗?

最佳答案

你有单个字符,你可以使用 == 来比较它们而不是 strcmp。只需成对读取输入并使用 switch 作为示例。

char c;
int x;

while(fscanf(fp, "%c %d", &c, &x) == 2)
{   switch(c)
    {   case '+': /* ... */
    }
}

关于c - 无法读取 C 中的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28065457/

相关文章:

c - C 嵌入式应用程序中 time() 函数的问题

我可以从套接字中准确读取一个 UDP 数据包吗?

添加到列表末尾的同一个链表函数可以用于添加到多个不同的链表吗?

c++ - segmentation 故障的常见原因的明确列表

c - 如何在C中按升序对字符串数组进行排序

c - 如何知道组播 UDP 中的组成员数量?

c - 由于 int 长度为 20mb,导致浮点异常(核心转储)/段错误(核心转储)

c - 当 C 需要特殊类型的 makefile 时,将 Fortran 90 与 C 混合使用?

c - 尝试将双向链表的内容写入文件

c - 使用多线程时保护全局变量