簡體   English   中英

C程序閱讀文件

[英]C Programming reading file

我正在嘗試編寫一個非常簡單的代碼來讀取文件。 但是,在該文件中,我有M_PI / 2,即pi / 2。 當我的代碼讀取該文件時,它將M_PI / 2設為0.000。 我該如何使我的程序讀為pi / 2。

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

int main()
{
    FILE *infile;
    infile = fopen("./test.txt","r");
    double p;


    fscanf(infile, "%lf", &p);

    printf ("%lf\n", p);
}


test.txt
M_PI/2

您需要閱讀文件的內容並自己進行評估。 M_PI不是編程環境范圍之外的數字,同樣,除法運算符/實際上只是一個斜杠,除非有人將其解釋為除法。 因此,您將需要創建某種評估程序來將文件的內容提供給它。

當您在C源代碼中編寫M_PI/2 ,您會得到π/ 2,因為編譯器知道math.h中將M_PI定義為π(實際上是π的近似值),並且它知道除法運算符。 但是,您尚未編寫編譯器或任何可以按您希望的方式評估M_PI/2的文件,因此您只需要在文件內容寫入文件時就可以獲取它們。

讀取文件時獲得所需內容的最簡單方法是將所需的值(即1.5707963267949)存儲在文件中。 然后fscanf()將讀取該值並將其正確解釋為浮點數,因為這就是您告訴它要在格式字符串中讀取的內容。

實際上,您要讀取的是表達式而不是數字 因此,您想評估這些表達式(在某種環境中,它定義了變量的含義或綁定 )。

因此,如果您堅持要滿足您的要求,那么您需要一個評估者,即一名口譯員

一種可能的方法是嵌入一些現有的解釋器,例如LuaGuile等。

否則,您需要一個用於您的表達語言的解析器 (您應該在紙上指定解析器 ,包括其正式語法-例如使用BNF-及其語義 ),以及一個用於解析的AST的評估器。 正式地說,您的M_PI看起來像一個數學變量,並且在某些環境中具有其價值。

如果您想走這條路,請閱讀一些有關解釋器和編譯器實現的教程教科書。 關於遞歸下降解析器的Wikipage正在解釋如何執行與您的需求類似的操作。 Google還在算術表達式評估器上 ,您會獲得很多相關的點擊。

有關GNU bison (解析器生成器,有時也稱為Compiler -compiler )的文檔包含以下部分: §2.2前綴表示法計算器 ,外觀類似於您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM