2015-11-23 349 views
-1

無法編譯代碼給最後一個令牌「}」中的錯誤。對不起,這是一種保存爲二進制文件的功能。輸入結束時,錯誤是預期的聲明或聲明。輸入結束時的預期聲明或聲明 - 錯誤

void gravarRegistos(contadorStruct *contador) 
{ 
    char sair; 
    int numelem = 0, erro = 0; 
    FILE *ficheiro; 

    do { 
     printf("Deseja gravar as alteracoes? (S/N)\n"); 

     sair = lerCaracter(); 
     if (sair == 'S') { 
      ficheiro = fopen("data.dat", "wb"); 

      if (ficheiro == NULL) 
       printf("Falha a abrir o ficheiro\n"); 
      else { 
       fwrite(contador, sizeof(contadorStruct),1, ficheiro); 
       numelem = fwrite(veiculos, sizeof(veiculosStruct), 
          contador->nrVeiculos, ficheiro); 

       if (numelem != contador->nrVeiculos) { 
        printf("Ocorreu um erro a gravar os dados no ficheiro, 
          apenas gravou %d Carros", numelem); 

        erro = fclose(ficheiro); 
        if (erro) 
         printf("Erro %d a fechar o ficheiro", erro); 
       } 
      } 
     } 
    } while(sair != 'S' && sair !='N'); 
} 
+2

請包括您在帖子中收到的實際錯誤消息。 – TylerH

+2

您發佈的代碼沒有任何明顯的錯誤。這可能是你沒有顯示的其他代碼部分(編譯器檢測到錯誤並不總是錯誤根源)。 – kaylum

+0

特別是,查找不平衡的大括號('{}')或圓括號('()'),並在文件的前面或隱藏在標題中查找丟失的分號(';')。 –

回答

0

與代碼的主要問題是調用printf()的第一個參數的語法無效。

除非通過\

轉義的字符串在<newline>結束建議:

printf("Ocorreu um erro a gravar os dados no ficheiro,\ 
         apenas gravou %d Carros", numelem); 
0

假設它不是一個格式articfact,很可能是這個

printf("Ocorreu um erro a gravar os dados no ficheiro, 
          apenas gravou %d Carros", numelem); 

你有一個換行符在你的字符串常量... dados no ficheiro, < ---這令編譯器感到困惑。

不是說你的代碼存在錯誤,但我也會採用「甚至使用大括號來表示單個語句」的方法。更容易閱讀和說明正在發生的事情。