pop編譯
1. Linux 下c語言怎樣調用C++的函數,怎麼編譯,舉個例子
完全和windows 下面沒有語法區別
在編譯之前我們需要在系統里安裝G++GCC,它們就是Linux下的C++/C的編譯器。代碼如下
代碼:
sudoapt-getinstallbuild-essential
sudoapt-getinstallgcc
sudoapt-getinstallg++
#include<iostream>
usingnamespacestd;
intmain()
{
cout<<"Hello,World! "<<endl;
return0;
}
另一個帶c++庫函數
#include<iostream>
#include<stack>
usingnamespacestd;
intsushu(intn)
{
inti;
for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
if(n==i&&n!=1)
return1;
else
return0;
}
intmain()
{
intn,i,j;
stack<int>mystack;
cin>>n;
while(n>1)
{
for(i=2;i<=n;i++)
{
if(n%i==0&&sushu(i)==1)
{
mystack.push(i);
n=n/i;
break;
}
}
}
while(!mystack.empty())
{
cout<<mystack.top()<<"";
mystack.pop();
}
return0;
}
名稱為test.cpp
你使用
g++ test.cpp
./a.out
2. 什麼是代碼,代碼的作用是什麼啊
代碼就是程序員用開發工具所支持的語言寫出來的源文件
代碼是一組有序的數字或字母的排列,是代表客觀實體及其屬性的符號。
代碼設計的原則包括惟一確定性、標准化和通用性、可擴充性與穩定性、便於識別與記憶、力求短小與格式統一以及容易修租返改等。
代碼可以泛指,如所有編程語言所編寫的字旦散符弊遲飢都可以叫代碼!
例如生活中:
有些人家用
老大,老二,老三,老夭,來代替家中四兄弟姐妹.
老大,老二,老三,老夭
就是代碼,代替四個名字,也代替四個人.老媽喊,"老夭,來淘米",就用了代碼老夭.
例如:ASCII碼,
GB2312碼,
UTF-8碼,
電報碼,
區位碼.
html代碼,js代碼,css代碼。
這些都是數字碼.
PUSH,
POP,
ADD
這些是運算和操作碼.
PUSH,
POP
是堆棧推入彈出操作,
ADD
是加法運算.
3. 網上找的c++,編譯顯示」error C2065: 'setviewport' : undeclared identifier」請問解決方法
由於 windows 下的 viewport 概念和過去有了很大的區別,為了避免大家混淆,EasyX 從 2011-2-24 起取消了這個函數。
下面解釋一下怎樣用其他函數替代 setviewport 的功能。
先說說過去的 setviewport() 的功能:
設置矩形區域
將信彎矩形區域左上角設置為原點坐標
可以選擇是否裁剪
對於設置裁剪,可以先定義一個區域,然後將該區域設置為裁剪區。區域的概念不僅局限於矩形,在 Windows GDI 函數中有很多定義區域的語句。下面代碼定義一個御讓矩形的區域,並設置為裁剪區:
HRGN rgn = CreateRectRgn(100, 100, 200, 200); // 定義矩形區域
setcliprgn(rgn); // 設置區域 rgn 為裁剪區
DeleteObject(rgn); // 不再使用 rgn,清理 rgn 佔用的系統資源
取消之前設置的滑拆悶裁剪區,可以用:
setcliprgn(NULL);
可以用 setorigin() 實現設置原點。例如設置 (100, 100) 為新的原點坐標,可以用代碼:
setorigin(100, 100);
可以用 setaspectratio() 設置 x 和 y 軸的方向。例如,設置 y 坐標軸的方向向上為正:
setaspectratio(1, -1);
通過這幾條語句的組合,可以實現遠遠比 setviewport() 強大並且實用的功能。各函數的詳細用法,請參見幫助文件。
4. 用C語言編譯數學運算
這個是我的實驗報告,跟你的這個一樣的。如果只要代碼的話就看最後面的。我感覺應該算比較全面的。你看看,有什麼具體要求可以提出來。
一、需求分析
1、 功能:疏如一行表達式,若表達式有誤,則輸出「表達式有錯」 ,否則計算出表達式的值並輸出。 運算符包括加、減、乘、除、乘方、一目減。 括弧均為小括弧,但可以層層嵌套。操作數可以是浮點數,也包括有多個字母組成的變數。
2、 輸入的形式為表達式,按回車結束。輸入值的范圍不超過浮點數的范圍。含有變數,變數名由字母組成,大小寫不限。
3、 若計算結果為整數,則輸出整數,若含有小數,則輸出浮點數。
二、概要設計
1、 總體思路,先讀入一行表達式,用一個字元數組存儲。然後依次讀每個字元,進行判斷。邊讀入邊進行計算。程序中用到了兩個棧,一個字元棧以及一個數字棧,分別用來存儲運算符和數字,根據運算符的優先順序進行計算。最後輸出結果。
2、程序包括幾個模塊,主函數和幾個基本函數。
說明幾個函數:
bool stackempty(save1 s)用來判斷操作數棧s是否為空。
void push(save1 &s,char e)若棧滿則輸出「棧已滿」,否則將元素e入棧
void pop(save1 &s, char &e)若棧為空則輸出「棧為空」,否則將棧頂元素賦給e
bool stackempty2(save2 s)用來判斷運算符棧s是否為空。
void push2(save2 &s, char e)若運算符棧滿則輸出「棧已滿」,否則將元素e入棧
void pop2(save2 &s, char &e)若棧為空則輸出「棧為空」,否則將棧頂元素賦給e
int in(char e)返回運算符e在棧內的優先順序別
int out(char e) 返回運算符e在棧外的優先順序別
void count(char a,char ope, char b)將a、b進行相應的運算,並將運算結果入棧
3、具體操作步驟:
1、先讀入一行表達式,用一個字元數組line[]存儲
2、依次讀入每個字元並進行處理同是進行表達式判錯:
1. 遇數字,則繼續判斷下一個字元,直到下一個字元不是數字且不是小數點,若該數含有兩個小以上數點,則表示輸入錯誤。否則即可保證該操作數是完整的浮點數,然後將該數入操作數棧。
若數字不是表達式的最後一位,且數字後面跟的不是「+、-、*、/、^、)」,則為表達式錯誤
2. 遇運算符,則分兩種情況:
1、若運算符為負號(該運算符為符號的情況有兩種:一為負號在最開頭,一為符號前面是「(」 ),則先將0入操作數棧,然後再將負號入運算符棧。
2、該運算符不是負號則與運算符棧的棧頂元素比:
(1) 若棧頂元素優先順序低, 新輸入的運算符入棧。
(2) 若棧頂元素優先順序高,
1) 從符號棧彈出一個運算符,
2) 從對象棧彈出一個/兩個操作數,
3) 運算結果壓入對象棧。
(3) 優先順序相等,則棧頂元素出棧,與輸入元素對消。
若「(、+、-、*、/、^」放在表達式最後面,則表達式錯誤
若「+、-、*、/、^」後面跟的不是數字或者變數,表達式錯誤
3、遇字母變數,則繼續判斷下一個字元,直到下一個字元不是字母變數,即可保證該變數是完整的,然後輸出「請輸入變數的值」,再將輸入的變數值入操作數棧。
若變數後面跟的不是「+、-、*、/、^、)」,則表達式錯誤
4、若所讀的該字元不是上述情況中的一種,則表達式錯誤
3、當將所有的字元都讀一遍之後,若表達式正確的話,則必然不含有「(」或者「)」。即若運算符棧中含有「(」或者「)」,則表達式必錯誤。 再考慮表達式正確的情況:運算符棧可能為空,則操作符棧中必剩下一個操作數,即最後的結果。若不為空,則留在運算符棧中的運算符的優先順序別從棧頂至棧底依次遞減。故可從運算符棧頂開始彈出一個運算符,從操作數棧中彈出兩個操作數進行運算,再將運算結果入操作數棧,一直循環至運算符棧為空。此時操作數棧剩下的唯一一個操作數就是運算結果。
三、結論及體會
1、實驗結論
a)、實驗完成了題目的要求,自己添加了對浮點數的操作,並進行判錯。
b)、編寫代碼基本上能夠滿足編程規范的要求,代碼的變數命名,以及注釋的書寫,基本能按照要求進行。
b)、將數據結構中的隊列和堆棧的知識復習到,並且學會創新,在代碼的編寫中,學習了編程規范,學習了結構化編程。
2、實驗體會
a)、通過本設計實驗將數據結構中的堆棧和隊列的知識復習到,並且能夠自己設計一些東西,學會了在設計實驗過程時的基本步驟。基本上能夠有條理的解決這些問題。
b)、在試驗中遇到了很多的問題,都是以前沒有發現的,這些問題設計的方面很多,有以前的C++基礎的,也有最近學習的數據結構的知識。通過實驗的設計,讓我發現了自己的不足。自己在學習知識上面的漏洞。自己在細節方面的考慮還不夠全面,很多細節都是通過調試才發現的。比如剛開始時忘了考慮變數之前有負號的情況以及將整個式子讀一遍之後,棧中的操作數可能還有剩,還得繼續進行計算等。希望通過彌補這些發現的漏洞,提高自己的專業知識水平。
c)、設計過程中的解決問題的方法,讓我明白了如何學習會更有效。如何學習才不會耽誤太多的時間。也學會了解決問題的一般方法:向老師、同學請教,藉助網路等等。
d)、實驗過程中也走了很多的彎路,由於在開始設計的時候思路不時很清晰,對於一些問題不能很好的提出解決問題的方法,在設計過程中,代碼總是重復的修改,在很多問題上,代碼並不時最優的。相信在以後的學習中,隨著知識的增多,問題會逐漸得到解決。
四、程序源代碼
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
#define MAX 1000
struct save1
{
float n[MAX];
int top;
}stack1;
struct save2
{
char n[MAX];
int top;
}stack2;
//stack1存儲數字,stack2存儲運算符號.
bool stackempty(save1 s)//判斷是否為空
{
if (s.top== -1)
return 1;
else
return 0;
}
bool stackempty2(save2 s)//判斷是否為空
{
if (s.top== -1)
return 1;
else
return 0;
}
void push(save1 &s,float e)//將e入棧
{
if(s.top==MAX-1)
{
cout<<"棧已滿"<<endl;
return ;
}
s.top++;
s.n[s.top]=e;
}
void push2(save2 &s,char e)//將e入棧
{
if(s.top==MAX-1)
{
cout<<"棧已滿"<<endl;
return ;
}
s.top++;
s.n[s.top]=e;
}
void pop(save1 &s,float &e)//將棧頂元素出棧,存到e中
{
if(s.top==-1)
{ cout<<"棧為空"<<endl; }
else
{e=s.n[s.top]; s.top--; }
}
void pop2(save2 &s,char &e)//將棧頂元素出棧,存到e中
{
if(s.top==-1)
{ cout<<"棧為空"<<endl; }
else
{e=s.n[s.top]; s.top--; }
}
int in(char e)//e在棧內的優先順序別
{
if(e=='-' || e=='+') return 2;
if(e=='*' || e=='/') return 4;
if(e=='^') return 5;
if(e=='(') return 0;
if(e==')') return 7;
return -1;
}
int out(char e)//e在棧外的優先順序別
{
if(e=='-' || e=='+') return 1;
if(e=='*' || e=='/') return 3;
if(e=='^') return 6;
if(e=='(') return 7;
if(e==')') return 0;
return -1;
}
void count(float a,char ope,float b)//進行計算並將計算結果入棧
{
float sum;
if(ope=='+') sum=a+b;
if(ope=='-') sum=a-b;
if(ope=='*') sum=a*b;
if(ope=='/') sum=a/b;
if(ope=='^') sum=pow(a,b);
push(stack1,sum);
}
int main()
{
int i=0,len,j,nofpoint,g=0;//len表示輸入式子的長度。 g表示讀入的字元是否是字母變數、數字以及運算符。
float a,b;//a、b用來存儲操作數棧中彈出的操作數,便於代入函數中進行計算。
char line[MAX],operate,temp[20];
cout<<"請輸入表達式"<<endl;
cin>>line;
len=strlen(line);
stack1.top=-1;//將棧置為空
stack2.top=-1;//將棧置為空
while(1)
{
g=0;
if(isdigit(line[i]))//若讀入的字元為數字,則繼續判斷下一個字元,直到下一個字元不是數字或者不是小數點,即可保證該操作數是完整的小數,然後將該數入操作數棧。
{
j=0; g=1;
nofpoint=0;//記錄所存的數中小數點的個數
while(isdigit(line[i]) || line[i]=='.')
{
if(line[i]=='.') nofpoint++;
temp[j++]=line[i];
i++;
if(i>=len) break;
}
if( nofpoint>1 || (i<len&&(line[i]!='-' && line[i]!='+' && line[i]!='*' && line[i]!='/' && line[i]!='^' && line[i]!=')')) )
{ cout<<"表達式有錯"<<endl; return 0; }//所存數中含有不止一個小數點,或者數字後面跟的不是「+、-、*、/、^、)」,則為錯誤
temp[j]='\0';
b=atof(temp);
push(stack1,b);
if(i>=len) break;
}
else
{
if(line[i]=='-' || line[i]=='+' || line[i]=='*' || line[i]=='/' ||
line[i]=='^' || line[i]=='(' || line[i]==')' ) //若讀入的字元為運算符的情況
{
g=1;
if(line[i]=='(' && i==len) { cout<<"表達式有錯"<<endl; return 0; }// 「(」放表達式最後面,錯誤
if(line[i]=='-' || line[i]=='+' || line[i]=='*' || line[i]=='/' || line[i]=='^')
{
if(i==len) { cout<<"表達式有錯"<<endl; return 0; }//「+、-、*、/、^」放在表達式最後面,錯誤
if( (!isdigit(line[i+1])) && (!isalpha(line[i+1])) && line[i+1]!='(')//「+、-、*、/、^」後面跟的不是數字或者變數,錯誤
{ cout<<"表達式有錯"<<endl; return 0; }
}
if(line[i]=='-' && (i==0 || line[i-1]=='(' ))//運算符是負號
{
push(stack1,0);
push2(stack2,line[i]);
i++;
}
else
{ //讀入的運算符與運算符棧的棧頂元素相比,並進行相應的操作
if(in(stack2.n[stack2.top])<out(line[i])||stackempty2(stack2)) { push2(stack2,line[i]);i++;}
else
if(in(stack2.n[stack2.top])==out(line[i])) {i++; stack2.top--;}
else
if(in(stack2.n[stack2.top])>out(line[i]))
{
pop(stack1,a);
pop(stack1,b);
pop2(stack2,operate);
count(b,operate,a);
}
if(i>=len) break;
}
}
else
{
if(isalpha(line[i]))//讀入的字元是字母變數的情況
{
g=1;
cout<<"請輸入變數";
while( isalpha(line[i])) { cout<<line[i]; i++; }
cout<<"的值"<<endl;
cin>>b;
push(stack1,b);
if(i>=len) break;
if(line[i]!='-' && line[i]!='+' && line[i]!='*' && line[i]!='/' && line[i]!='^' && line[i]!=')')//變數後面跟的不是「+、-、*、/、^、)」,則為錯誤
{ cout<<"表達式有錯"<<endl; return 0; }
}
}
}
if(g==0) { cout<<"表達式有錯"<<endl; return 0; }//g=0表示該字元是不符合要求的字元
}
while(stack2.top!=-1)//讀入結束後,繼續進行操作,直到運算符棧為空
{
pop(stack1,a);
pop(stack1,b);
pop2(stack2,operate);
if(operate=='(' || operate==')') //括弧多餘的情況
{ cout<<"表達式有錯"<<endl; return 0; }
count(b,operate,a);
}
cout<<stack1.n[stack1.top]<<endl;
return 0;
}
5. C++ #pragma pack(push) #pragma pack(4)的時候,編譯的時候報錯:pragma is not allowed here
報什麼錯?和你的結構敬賀體有關的話就把結構體在其它位置定義,別夾到Pragma中間了亮櫻派。如果和結構體無關,感覺可能和你的Pack(4)有頌差關
6. java位元組碼 pop什麼意思
就是.class文件,.java文件編譯後就會生成.class文褲洞件(即位元組碼文件胡答枯),然舉此後編譯器載入這個位元組碼文件,類載入器按類名載入文件中的類,執行入口main方法。
7. java反編譯class文件後出現PUSH、POP怎麼理解
以猜談下是同一CLASS文件反編譯穗轎碰出來的代碼:
可以看出:
1、JODE出來的代碼的可讀性最好,不過有CLASS文件代碼用JODE是反編譯不出來出現異常;
2、JAD出來的代碼經常要進行大量整理;
3、JODE和JAD對混混淆過的代碼,變數的順序可能會不一樣,自變數的命名,JODE會好一些。
4、對於PUSH和POP,左修整時候,可以自己加自變數,臨帆慧時存儲;
5、JAVA對於表達式或函數參數,是從右到左進行解釋的。函數參數,最後PUSH的,是最右邊的參數;對於
等號賦值也是先右後左進行出棧。
8. 匯編語言字元串復制指令PUSH和POP指令必須成對出現嗎如果不必要那在什麼情況不需要,什麼情況需要
根據我的理解,PUSH和POP並不是非用不可的指令,無非是臨時保護一下有可能會被破壞的寄存器數據,你也可以手動將這些數值保存到一個中間暫存的寄存器,等突發事件(通常是中斷)過後,再把原來的值取回來,效果一樣,但你必須設置一些寄存器來做暫存器。但是用PUSH和POP可以更方便地保存一大堆需要保護的數據,兩者通常都是成對出現的,如果你不POP,那你PUSH幹嘛?同時你必須記住後進先出的原禪枯則,如果順序搞錯,那麼數值就全亂了。
如果你非要不成對出現,也可以啊。比如,你先PUSH ACC 再PUSH 60H,然後進行一大堆的操作,突然再來一個PUSH ACC ,這樣也沒人說你不可以呀,只是你要記住,堆棧那裡進了3個值,分別是第一次的A值,60H那裡的值,第二次的A值。然後你開始回復數據,假如你不想要第一次的A值了,你可以只POP ACC 和POP 60H,這樣就是三個PUSH,卻只用了兩個POP,可以呀,編譯不會指出你有錯誤,但是廳或你自己要記住,還有一個值存著,沒有取出,就是第一次的A值。當下一次你再進行PUSH的時候,請記得這一點,那個值一直存著,不會被清理掉,直到你所使用的POP還清了「欠」PUSH的「債」。
以上講那麼多,只是想說明,沒有什麼是死的,只要你了解它的處理過程,像樓上兄弟所說的,堆棧只是一個指針,你只要明白它當前指向哪裡,就可以活用它。比如上面我所說的例子,如果你想讓A跟60H交換一個數值,只需要把後進先出的順序顛倒一下,用後進後出就可以了:
PUSH ACC
PUSH 60H
………………
POP ACC
POP 60H
注意,上面不是通常的出賀伏洞棧順序,其結果就是ACC和60H的值對調了一下。
9. c語言中出現函數矛盾怎麼辦,例如pop(s,x)用c語言編譯後出現錯誤,這是數據結構題。
什麼叫函數矛盾?
你用的是C++編譯環境嗎?
改成.c就行了
標准C中沒有pop這個函數
如果要用C++
#include<stack>
有pop
push
數據結構的模板
10. 編譯原理語法分析編程
#include <iostream>
#include <string>
#include <fstream>
#include <queue>
#include <string.h>
#include <stdio.h>
using namespace std;
enum Datatype { RESERVE_WORD=1,IDENTIFIER=2,DIGIT=3,OPERATOR=4,SEPRATOR=5 };
struct OutputStruct
{
public:
Datatype type;
string value;
};
string operate[]={"sin","cos","pow"};
string KeyWord[]={"main","int","if","char","cout"};
const int MAX_SIZE=255;
char BUFF[MAX_SIZE]; //buffer to contain a char line.
ifstream inFile;
ofstream outFileStream;
queue<OutputStruct> tt;
bool IsKeyWord(string& cs)
{
for(int i=0;i<5;++i)
if(cs==KeyWord[i])
return true; //Exist
return false;
}
void ReadLineAndAnalyze()
{
int strSize=0;
int i;
int errFlag=0;
char ch;
string outStructStr,str;
struct OutputStruct outStruct;
{
i=0;
inFile.getline(BUFF,MAX_SIZE,'\n');
strSize=inFile.gcount();
cout<<BUFF;
do{
str="";
do{
ch=BUFF[i];
i++;
}while(ch==' '||ch==' '||ch=='\n');
switch(ch)
{
case '+':
case '-':
case '*':
case '/':
outStruct.type=OPERATOR;
outStruct.value=ch;
break;
case '=':
case '>':
case '<':
outStructStr=ch;
if(BUFF[i]=='=')
{
outStruct.type=OPERATOR;
outStructStr+=BUFF[i];
outStruct.value=outStructStr;
i++;
}
else
{
outStruct.type=OPERATOR;
outStruct.value=ch;
};
break;
case ',':
case ';':
case '{':
case '}':
case '(':
case ')':
case '[':
case ']':
case '\"':
outStruct.type=SEPRATOR;
outStruct.value=ch;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
outStructStr+=ch;
while(BUFF[i]>='0'&&BUFF[i]<='9'||BUFF[i]=='.')
{
outStructStr+=BUFF[i];
i++;
}//while
outStruct.type=DIGIT;
outStruct.value=outStructStr;
break;
default:
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')
{
outStructStr+=ch;
while(BUFF[i]>='a'&&BUFF[i]<='z'||BUFF[i]>='A'&&BUFF[i]<='Z')
{
outStructStr+=BUFF[i];
i++;
}//while
if(IsKeyWord(outStructStr))
{
outStruct.type=RESERVE_WORD;
outStruct.value=outStructStr;
}
else
{
outStruct.type=IDENTIFIER;
outStruct.value=outStructStr;
}
break;
}
else
errFlag=1;
}//switch;
if(!errFlag)
tt.push(outStruct);
errFlag=0;
outStructStr="";
}while(i<strSize-1);
}//while(i<MAX_SIZE&&!inFile.eof());//do_while
return;
}
float F();
float T();
float E();
float S();
float F()
{
float ret;
if((tt.front().type==IDENTIFIER)||(tt.front().type==DIGIT))
{
ret=atof(tt.front().value.c_str());
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
return ret;
}
if(tt.front().value=="(")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
ret=E();
if(tt.front().value==")")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
return ret;
}
else
{
cout<<"\b ----ERROR! "<<tt.front().value<<" 缺少右括弧"<<endl;
cout<<"Press \"enter\" to modify the data file!";
getchar();
system("notepad data.txt");
exit(0);
}
}
else
{
cout<<"\b ----ERROR! "<<tt.front().value<<" 缺少因子"<<endl;
cout<<"Press \"enter\" to modify the data file!";
getchar();
system("notepad data.txt");
exit(0);
}
}
float T()
{
float i,j;
i=F();
if(tt.front().value=="*")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
j=T();
return i*j;
}
else if(tt.front().value=="/")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
j=T();
if(abs(j)<0.0000001)
{
cout<<"\b ----ERROR! 除數為零!"<<endl;
cout<<"Press \"enter\" to modify the data file!";
getchar();
system("notepad data.txt");
exit(0);
}
return i/j;
}
return i;
}
float E()
{
float i,j;
i=T();
if(tt.front().value=="+")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
j=E();
i=i+j;
}
else if(tt.front().value=="-")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
j=E();
i=i-j;
}
if(tt.front().value==";"||tt.front().type==OPERATOR||tt.front().value==")")
return i;
else
{
cout<<"\b ----ERROR! "<<tt.front().value<<" 缺少運算符"<<endl;
cout<<"Press \"enter\" to modify the data file!";
getchar();
system("notepad data.txt");
exit (0);
}
}
float S()
{
float i;
i=E();
if(tt.front().value==";")
{
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
tt.pop();
return i;
}
cout<<"\b ----ERROR! "<<tt.front().value<<" 缺少左括弧"<<endl;
cout<<"Press \"enter\" to modify the data file!";
getchar();
system("notepad data.txt");
exit(0);
}
void GrammaAnalize()
{
float i;
if(tt.empty())
{
cout<<"END"<<endl;exit(0);
}
i=S();
cout<<"\b="<<i<<endl;
}
int main()
{
inFile.open("data.txt");
if(!inFile)
{
cout<<"打開源文件失敗!";
return 1;
}
while(!inFile.eof())
{
ReadLineAndAnalyze();
GrammaAnalize();
}
inFile.close();
return 0;
}