fscanf只读取一个整数但分配给多个变量

时间:2015-11-04 04:33:47

标签: integer eof scanf

我整天都在做一个项目而且我已经开始讨厌,因为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

老实说,我不知道出了什么问题,因为我之前做过几乎相同的事情并且有效。谢谢你的帮助!

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"