我整天都在做一个项目而且我已经开始讨厌,因为fscanf并没有像我想象的那样工作。
我正在阅读包含以下内容的文件:
AND 0 3 2
以下是我的代码中的一个问题:
while(fscanf(circuit, "s",cur_gate)!=EOF){
if(cur_gate[0]=='A'){
fscanf(circuit,"%d %d %d",&cur_output,&cur_input1,&cur_input2);
printf("current output: %d\n",cur_output);
printf("current input: %d current input2: %d\n",cur_input1,cur_input2);
所以我正在做的是读取文件并检查string = AND(cur_gate)。然后,如果它=' A',我正在读3个整数。我想分别将第一个整数分配给cur_output,将第二个和第三个整数分配给cur_input1和cur_input2。
问题在于它的输出是:
当前输出:0
当前输入:0当前输入2:0
虽然输出实际应该是:
当前输出:0
当前输入:3当前输入2:2
老实说,我不知道出了什么问题,因为我之前做过几乎相同的事情并且有效。谢谢你的帮助!
答案 0 :(得分:1)
fscanf(circuit, "s",cur_gate)
会尝试扫描文字 s
字符。如果您想扫描字符串,则需要%s
。
如果您按照“检查想要的而不是不想要”scanf
的规则,这将更加明显:
while (fscanf (circuit, "s",cur_gate) == 1) {
在您的情况下发生的情况是,文字s
的扫描失败但不会返回EOF
。因此,当您在整数中扫描时(缓冲区必须有A
作为第一个进入if
循环的字符),它们也会失败,因为输入流指针仍然在A
开始时AND
。
顺便说一下,除非你控制输入,否则在这里使用
fscanf
会导致缓冲区溢出问题。可能better ways要做到这一点。
答案 1 :(得分:0)
试试这个:
while(fscanf(circuit, "%s",cur_gate)!=EOF){
if(cur_gate[0]=='A'){
fscanf(circuit,"%d %d %d",&cur_output,&cur_input1,&cur_input2);
printf("current output: %d\n",cur_output);
printf("current input: %d current input2: %d\n",cur_input1,cur_input2);
变更:
"s" -> "%s"