我必须根据我读取的文本文件的输入创建一个电路。 我使用的第一个文本文件具有电路描述,然后下一个文件具有您最终创建的电路的实际二进制值。
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
如何在每行的第一个单词之后获取字符?
答案 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()以转换为数字。