頁:
[1]
2
Struct與字串比對問題
本帖最後由 u87cl3su3 於 2016-4-29 10:37 PM 編輯各位高手
小弟遇到了你們一定覺得非常無聊的問題...............
但還是麻煩大家幫我解開一下疑問!!
圖1-1. struct data student; 這個是"結構陣列"的意思嗎? 是指結構裡只可以儲存兩筆資料的意思嗎?
圖1-2. 假設我要另外建立student (只可以存兩筆資料) ,除了前面的方法還有別的嗎? 不能直接給值,要後來輸 入
圖1-3. 當結構以位址傳入函式時,函式裡student.number 不是要使用"->...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div> 1.
struct data student; 是結構陣列沒錯。並非結構"裡"只能儲存兩筆資料,而是宣告的資料總共有兩筆。
資料一 : student
資料二 : student
2.
不清楚您的意思,是指要在執行時期加上student嗎?
資料一 : student
資料二 : student
資料三 : student (新建立)
3.
請注意以下的差別:
ptr -> number
ptr.number
4.
不清楚您的意思,請問為何還要特地用else if而不是else就好?還有是想在找不到任何相符的資料時印出"No this number"還是說尋找時該筆資料不符就印出"No this number"呢?
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 圖1-2. 假設我要另外建立student (只可以存兩筆資料) ,除了前面的方法還有別的嗎? 不能直接給值,要後來輸
動態create 記憶體空間即可
圖1-3. 當結構以位址傳入函式時,函式裡student.number 不是要使用"->"嗎? 為什麼改成->反而是錯的?
->為指標的操作型態。是有極大的差別。即指標和真實的資料型態 2-1. 函式裡我要尋找剛剛輸入的資料,for迴圈用來找結構裡的資料這樣的用法對嗎? (跟陣列一樣的搜尋用法)
在if-else判斷的地方 (圖1綠色部分),因為有兩筆資料,所以在比對時一定有一筆是錯的所以else也執行了就 像圖2紅圈的地方,請問判斷式裡面該怎麼改.............
如果只是判別是否為 某一個數字時用
if
else
即可<br><br><br><br><br><div></div> a8066892 發表於 2016-4-30 02:36 AM static/image/common/back.gif
1.
struct data student; 是結構陣列沒錯。並非結構"裡"只能儲存兩筆資料,而是宣告的資料總共有兩筆。 ...
2.的意思是 跟student一樣想要存兩筆資料 有沒有另外的宣告方式。
4.而if-else,我一開始else沒有加條件。但因為for迴圈,假設有number:A1跟B2兩筆資料,當輸入A1則輸出A1資料,但是B2因為不符合A1所以else也被執行,這邊我一直不知道該怎麼處理。
不知道這樣夠不夠清楚...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> truelazo 發表於 2016-4-30 10:34 AM static/image/common/back.gif
2-1. 函式裡我要尋找剛剛輸入的資料,for迴圈用來找結構裡的資料這樣的用法對嗎? (跟陣列一樣的搜尋用法)
...
你好 我一開始else也沒有判斷式,但是不知道是不是for迴圈的關係 所以else永遠都會被執行
我才會想說再else那邊加判斷試試看,但條件我想不出可以怎麼寫...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> u87cl3su3 發表於 2016-4-30 11:08 AM static/image/common/back.gif
2.的意思是 跟student一樣想要存兩筆資料 有沒有另外的宣告方式。
4.而if-else,我一開始else沒有加 ...
2.
宣告陣列也可以選擇動態配置記憶體
data *Mydata = new data;
由於動態配置的記憶體會存放於Heap,而不是在stack
所以需注意當不再使用應將記憶體歸還系統
delete [] Mydata;
P.S.當需要宣告一個夠大的陣列時,應要利用動態配置記憶體
避免產生stack overflow
4.
如果是要在找不到任何相符的資料才印出的話
可以另外宣告一個boolean型態的變數判斷有無找到資料
bool isfound = false;
for( int i = 0 ; i < 2 ; i++)
if( ptr.number == searchN )
{
print ...
isfound = true;
}
if ( !isfound )
print "No this number"
不過當然是不建議用上面的寫法,一般來說先尋找是否有相符資料再決定是否印出是比較好的方式
在C++ STL有更好的做法,但您還是初學階段的話還是先熟悉語法比較合適...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 如果你else的一直執行,表示你if永遠是錯的,我的經驗是,cin抓進來的是string的格式嗎? 本帖最後由 u87cl3su3 於 2016-5-1 03:50 PM 編輯
truelazo 發表於 2016-5-1 02:18 PM static/image/common/back.gif
如果你else的一直執行,表示你if永遠是錯的,我的經驗是,cin抓進來的是string的格式嗎? ...
其他提供動態記憶體方法的大大們 謝謝 我成功了
truelazo大大
我的cin 是string 沒錯 我該換其他的輸入方式嗎??
我上網看過一些其他的輸入方式 但我不是很懂得使用時機...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div> 把程式碼post上來,好幫你debug一下。打字很累,而且現在也不用C/c++
void practice1(struct data *);
void search(struct data *);
struct data
{
string number;
float score;
};
int main()
{
struct data student;
cout << "INPUT" << endl;
practice1(&student);
cout << "SHOW" << endl;
search(&student);
system("pause");
return 0;
}
void practice1 (struct data *student)
{
int i=0;
while(i<2)
{
cout << "No." << i+1 << " student." << endl;
cout << "Input number:";
cin >> student.number;
cout << "score=";
cin >> student.score;
cout << endl;
i++;
}
}
void search(struct data *ptr )
{
string searchN;
do{
cout << "Exit(0)" << endl;
cout << "Input number to search:";
cin >> searchN;
for(int i=0;i<2;i++)
if(ptr.number == searchN)
cout << ptr.number << "'s score = " << ptr.score << endl;
else if(ptr.number ???)
cout << "No this number" << endl << endl;
}while(searchN!="0");
}...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 程式碼我不知道該怎麼包.......{:38:} 找不到可以包住程式碼的 抱歉 請原諒我{:51:} #include <iostream>
using namespace std;
void practice1(struct data *);
void search(struct data *);
struct data
{
string number;
float score;
};
int main()
{
struct data student;
cout << "INPUT" << endl;
practice1(&student);
cout << "SHOW" << endl;
search(&student);
//system("pause");
return 0;
}
void practice1 (struct data *student)
{
int i=0;
while(i<2)
{
cout << "No." << i+1 << " student." << endl;
cout << "Input number:";
cin >> student.number;
cout << "score=";
cin >> student.score;
cout << endl;
i++;
}
}
void search(struct data *ptr )
{
string searchN;
while(1){
cout << "Input number to search:";
cin >> searchN;
searchN=string(searchN);
for(int i=0;i<2;i++){
cout << "test: " << ptr.number <<endl;
cout << "searchN: " << searchN <<endl;
if(ptr.number == searchN){
cout << "found" << endl;
cout << ptr.number << "'s score = " << ptr.score << endl;
break;
}
else
cout << "No this number" << endl << endl;
}
};
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 這樣就可以run, 輸入兩組數字,如果有找到就輸出 found<br><br><br><br><br><div></div>
頁:
[1]
2