C输入中的电路仿真器

时间:2015-11-29 20:44:42

标签: c

我必须根据我读取的文本文件的输入创建一个电路。 我使用的第一个文本文件具有电路描述,然后下一个文件具有您最终创建的电路的实际二进制值。

 Example:
 INPUTVAR 3 A B C
 OUTPUTVAR 1 Q
 AND A B w
 AND A C x
 OR w x Q

这个例子的格式意味着有3个输入变量叫做A,B,C。还有一个叫做Q的输出变量.And创建一个名为w = A.B的表达式。与x = A.C一起。和=是Q = w.x.我的问题是我不知道如何读取此输入,因为它不是每次都是相同的格式。 INPUTVAR之后的变量数量取决于第一个数字所表示的数量。我对如何在代码中解释这一点感到困惑,我知道如何读取格式化的数据。任何提示或帮助将不胜感激。

我相信我需要使用fgets()逐行完成。

在帮助下我提出了以下代码

 FILE *circuit;
 circuit = fopen(argv[1],"r");
 char line[50];
 char *str;
 while (fgets(line,sizeof(line),circuit) != NULL)
 {
 str = strtok(line," "); //space is DELIM
 printf("str is: %s\n",str);
 }

我正在考虑我作为示例包含的文本文件中的以下输出: str是:INPUTVAR str是:OUTPUTVAR str是:AND str是:AND str是:OR

如何在每行的第一个单词之后获取字符?

2 个答案:

答案 0 :(得分:1)

我调整了你的代码[请原谅任何无偿的风格清理]:

print(result)

     A   B    C   D    F
0   A0  B0   C0  D0  NaN
1   A1  B1   C1  D1  NaN
2   A2  B2   C2  D2   F2
3   A3  B3   C3  D3   F3
6  NaN  B6  NaN  D6   F6
7  NaN  B7  NaN  D7   F7

更新根据您的要求,这是一个更通用的解决方案,让您更接近。这编译但未经测试。但是,它应该给你这个想法。

FILE *circuit;

circuit = fopen(argv[1], "r");
char line[50];
char *str;
char *cp;

while (1) {
    cp = fgets(line, sizeof(line), circuit);
    if (cp == NULL)
        break;

    cp = strchr(line,'\n');
    if (cp != NULL)
        *cp = 0;

    cp = line;
    while (1) {
        str = strtok(cp, " ");
        cp = NULL;

        if (str == NULL)
            break;

        printf("str is: %s\n", str);
    }
}

答案 1 :(得分:0)

您可以使用fgets()作为字符串读取输入行,并在其上执行split()函数以将其解析为数字。拆分使用空格作为分隔符创建一个字符串数组。第一个字符串将是字符串格式的INPUTVAR,然后您可以在其上执行atoi()以转换为数字。