2011-10-23 27 views
0

我正在執行一個brainfuck解釋器,我正在努力連續調用兩個,命令。連續調用fgetc中的C

這裏是我的代碼的摘錄:

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define MEM_SIZE 30000 
#define MAX_LINE_LENGTH 256 

int main (int argc, char **argv) 
{ 
    char *input = ",.,."; 
    char bytes [MEM_SIZE] = {0}; 

    int pos=0; 
    int i=0; 

    while (input[i] != '\0'){ 

     switch (input[i]){ 
      case '.': 
       printf ("%c", bytes[pos]); 
       break; 
      case ',': 
       printf ("Enter Number:\n"); 
       bytes[pos] = fgetc (stdin); 
       printf ("Number Entered\n"); 
       break; 
      default: 
       break; 
     } 
     i++; 
    } 
    return EXIT_SUCCESS; 
} 

程序的輸出如下:

Enter Number: 
3     // This is me, manually entering the value. 
Number Entered 
3Enter Number: 
Number Entered 

爲什麼不fgetc第二個電話的工作?

回答

5

是什麼讓您認爲第二次撥打fgetc不起作用?第二個fgetc讀入\n(您按了return,對吧?)。

另一個問題,你正在閱讀字符。 fgetc返回int。在盲目使用它之前,您應該檢查它是否爲EOF

+0

+1更準確的答案。 –

1

您不會推進您的pos計數器,因此您下次將數據保存到bytes[pos]時,您將覆蓋以前的數據。

Btw。嘗試改變

printf ("Number Entered\n"); 

printf ("Number Entered: %c\n", bytes[pos]); 

調試你fgetc()收到的信息。

+0

雖然不推進'pos'可能是一個問題(很好的捕獲),但這不是OP所抱怨行爲的原因。 – cnicutar