【问题标题】:fscanf with 2 files and multiple lines带有 2 个文件和多行的 fscanf
【发布时间】:2016-03-05 12:46:49
【问题描述】:

我正在尝试用 2 个文本文件构建一个电路模拟器,一个包含电路描述,另一个包含值。

防爆电路:

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

这样就创建了电路:w = A.B; x = 交流; Q = w + x; Inputvar 具有后跟一个 int 的格式,然后是对应于变量名称的许多字符,对于 Outputvar 也是如此。

前输入:

 1 0 1
 0 0 1

我正在尝试读取输入的第一行,然后读取电路文件的前 2 行,以使用索引处的相应值填充数组。

 FILE *circuit, *input;
 input = fopen(argv[2],"r");
 int upper[26],output[26]; //upper is array of all upper letters, output is same.
 char str1[10],str2[10];
 int i,numin,numout;

 while(!feof(input)
 {
 circuit = fopen(argv[1],"r");
 fscanf(circuit("%s %d ", str1, &numin);
 //this works correctly and gets INPUTVAR then 3.
 for(i = 0; i <numin; i++)
 fscanf(input,"%d ",&upper[i]);
 fscanf(circuit,"%s %d ",str2,&numout);
 //does not work correctly
 }

用输入变量填充数组后,我试图获取有多少输出及其名称,然后用临时编号填充相应的数组(输出)以存储以备后用。我使用 fscanf 是因为我为每种“电路块”类型指定了格式。

如何让它也读取 circuit.txt 中的第二行?在我这样做之后,我必须阅读其余的行来“创建”电路。

【问题讨论】:

  • 不要使用while(!feof(input) 检查fscanf() 的结果以了解何时退出循环。
  • 如果你真的想要容错代码,用fgets()阅读每一行然后解析。如果使用sscanf() 解析,请检查其结果。

标签: c scanf


【解决方案1】:

fscanf(circuit("%s %d ", str1, &amp;numin); 行读取 INPUTVAR 和此行的 3:INPUTVAR 3 AB C。但是,下一次读取将获得 AB C。您需要阅读这些项目以跳过它们并进入下一行。

【讨论】:

  • %*[^\n] 我添加了这个,它似乎有效。现在我只需要弄清楚如何“构建”电路。
猜你喜欢
  • 2019-03-05
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
相关资源
最近更新 更多