找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
尊貴會員無限觀看附件圖片尊貴會員無限下載附件尊貴會員無限看帖不用回覆
上原亞衣波多野結fate催眠無碼 megmgoffice
[♞CG(sone 153鈴芽之旅羅賓陳勃ボクだけ阿尔法地无套转生

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[繁]怪人的沙拉碗03-

[繁]魔法科高中的劣等

[繁]老夫老妻重返青春

[繁]無職轉生 第二季1

(4月新番)[簡]被稱為

[簡]Unnamed Memory
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2148|回復: 12
打印上一主題下一主題

[作業][已解決]visual c++(陣列檢查重複輸入數字) 關閉[複製鏈接]

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
跳轉到指定樓層
樓主
發表於 2013-11-2 08:19 PM|只看該作者|倒序瀏覽
本帖最後由 fk035372150 於 2013-11-3 08:42 PM 編輯

題目是要我們輸入20個範圍介於10~100數字的陣列,(但重複的或是超出範圍的要顯示警告訊息並排除)
以下是我的程式碼,檢查重複的地方怪怪的(1.檢查會出錯2.無法跳出while迴圈)
是我用錯方法嗎?還是變數範圍有錯?麻煩高人指點謝謝~
#include <iostream>
using namespace std;

int main()
...
瀏覽完整內容,請先 註冊登入會員
附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
分享分享0收藏收藏0支持支持0

使用道具檢舉

帖子
614
積分
1600 點
潛水值
10160 米
頭香
發表於 2013-11-2 09:35 PM|只看該作者
變數很混亂
另外建議先判定是否有效的輸入,再 insert 到 input[]
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
3
發表於 2013-11-2 09:45 PM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
a221962 發表於 2013-11-2 09:35 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

變數很混亂
另外建議先判定是否有效的輸入,再 insert 到 input[]

if(input<10 || input>100){
                cout << "Invalid number." << endl;
...
瀏覽完整內容,請先 註冊登入會員

點評

a221962 是否重複的判定也建議放在 insert 之前,同是否超過範圍的判定同一時刻。  發表於 2013-11-2 10:05 PM
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

Rank: 1

帖子
12
積分
126 點
潛水值
28210 米
4
發表於 2013-11-2 10:15 PM|只看該作者
本帖最後由 ifiwant 於 2013-11-2 10:32 PM 編輯

抱歉我手邊只有Dev C++,我參照你所給定的程式做編譯會錯誤,因此做了部份修改(將input修改成input),另外我將版主您所提供的程式,小幅度的修改一下(註解的部份)。

麻煩版主指教,與交流一下。

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.   int input[20];
  6.   int i,j = 1,num = 20;
  7.   cout << "Enter 20 integers between 10 and 100:" << endl;
  8.   for(i = 0;i < num;i++){
  9.     cin >> input[i];
  10.     if (input[i] < 10 || input[i] > 100) {
  11.       cout << "Invalid number." << endl;
  12.       --i;
  13.       continue; // 當輸入不正確的數字範圍,應該終止往下執行程式
  14.     }
  15.     j = 0; // j的初始值應該放在迴圈內,每輸入一個數字,應該重頭開始檢查數字是否已再已輸入的數字內(除了第一次輸入)
  16.     while(j < i){      
  17.       if (input[j] == input[i]) { // j應該從0開始到i-1,因為i的值為目前輸入數字的個數
  18.         cout << "Duplicate number." << endl;
  19.         --i; // 只有當重覆輸入數字,才需要將i做減1的動作
  20.         break; // 找到重複的數字後,不再繼續比對後續未比對的數字
  21.       }
  22.       j++;               
  23.     }
  24.   }
  25.   cout << "The nonduplicate values are: ";
  26.   for (i = 0; i < num; i++) {
  27.     cout <<"  " << input[i];
  28.   }
  29.   cout << endl;
  30.   system("pause");
  31. return 0;
  32. }
複製代碼

...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
5
發表於 2013-11-2 10:54 PM|只看該作者
本帖最後由 fk035372150 於 2013-11-2 10:55 PM 編輯
ifiwant 發表於 2013-11-2 10:15 PM [url=forum.php?mod=redirect&goto=findpost&pid=250489824&ptid=9165744][/url]
抱歉我手邊只有Dev C++,我參照你所給定的程式做編譯會錯誤,因此做了部份修改(將input修改成input),另外 ...

不好意思,剛剛編譯您的程式出現如下錯誤
...
瀏覽完整內容,請先 註冊登入會員





附件: 你需要登錄才可以下載或查看附件。沒有帳號?註冊
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

Rank: 1

帖子
12
積分
126 點
潛水值
28210 米
6
發表於 2013-11-2 11:29 PM|只看該作者
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。
fk035372150 發表於 2013-11-2 10:54 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

不好意思,剛剛編譯您的程式出現如下錯誤
檢查重複只會檢查到前一個輸入的數字並不會檢查整個陣列欸
可能 ...
...
瀏覽完整內容,請先 註冊登入會員
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
328
積分
2651 點
潛水值
10849 米
7
發表於 2013-11-2 11:42 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
另一個解法,一開始就開一個陣列,大小是 10~100,輸入過的數字就填 1,填入前做確認即可。
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     const int LOWER = 10;
  6.     const int UPPER  = 100;
  7.     const int ARY_SIZE  = UPPER - LOWER+ 1;
  8.     const int COUNT = 20;

  9.    int  NumFlag[ARY_SIZE] = {0};
  10.    int  input , tIdx;
  11.    for( idx = 0 ; idx < COUNT ;  ) {
  12.         cin >> input;
  13.         if(input < LOWER || input > UPPER) continue; // input error

  14.         tIdx = input - LOWER;
  15.         if ( NumFlag[tIdx  ] == 0) { // 沒輸入過
  16.                 NumFlag[tIdx] = 1;
  17.                 idx++ ;  // 沒輸入過才把計數器 + 1
  18.                 cout << " Dump number " << endl;
  19.         } else {
  20.                  // 有輸入過就不處理了
  21.         }
  22.    }

  23.    // 其他從頭到尾找輸入過哪些數字就略了

  24.    return 0;
  25. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
如果沒有明天
我想見你最後一面
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。

使用道具檢舉

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

帖子
46
積分
1115 點
潛水值
19260 米
8
發表於 2013-11-3 12:26 AM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
我照你的code修改,應該比較好懂
  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.   int input[20];
  6.   int i,j = 1,num = 20;
  7.   cout << "Enter 20 integers between 10 and 100:" << endl;
  8.   for(i = 0;i < num;i++){
  9.     cin >> input[i]; // cin要存入整數, input本身是陣列, 要給index
  10.     if(input[i]<10 || input[i]>100){ // 同上
  11.       cout << "Invalid number." << endl;
  12.       --i;
  13.     }
  14.     j = 0; // j每次迴圈必須歸零,重頭開始檢查重複的數字
  15.     while(j<i){ // 檢查index i之前的數字, i本身不用檢查
  16.       if(input[j] == input[i]) { // 不用j-1
  17.         cout << "Duplicate number." << endl;
  18.         --i; // 如果重複, 才把i減一
  19.       }
  20.       j++;
  21.     }
  22.   }
  23.   // input是陣列, 必須用迴圈印出所有的值
  24.   cout << "The nonduplicate values are: ";
  25.   for(i = 0; i < num; ++i) cout << input[i] << ",";
  26.   cout << endl;
  27.   system("pause");
  28.   return 0;
  29. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
9
發表於 2013-11-3 02:42 AM|只看該作者
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。
本帖最後由 fk035372150 於 2013-11-3 02:46 AM 編輯
EdisonX 發表於 2013-11-2 11:42 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

另一個解法,一開始就開一個陣列,大小是 10~100,輸入過的數字就填 1,填入前做確認即可。 ...
...
瀏覽完整內容,請先 註冊登入會員
若有安裝色情守門員,可用無界、自由門等軟件瀏覽伊莉。或使用以下網址瀏覽伊莉: http://www.eyny.com:81/index.php

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
10
發表於 2013-11-3 02:43 AM|只看該作者
chenvey2 發表於 2013-11-3 12:26 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

我照你的code修改,應該比較好懂

已經解決問題並了解我錯在哪了,感謝您的指教~~^ ^




使用道具檢舉

帖子
614
積分
1600 點
潛水值
10160 米
11
發表於 2013-11-3 04:19 AM|只看該作者
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
  1. #include <vector>
  2. #include <iostream>
  3. #include <algorithm>

  4. int main()
  5. {
  6.     const int COUNT = 20;
  7.     const int LOWER = 10;
  8.     const int UPPER  = 100;
  9.     int input,index = 0;
  10.         std::vector<int> numbers;

  11.     std::cout << "Enter 20 integers between 10 and 100:" << std::endl;
  12.         while (index < COUNT)
  13.         {
  14.                 std::cin >> input;
  15.         if(input < LOWER || input > UPPER)
  16.                 std::cout << "Invalid number." << std::endl;
  17.                 else
  18.                 {
  19.                         auto exist = std::find(numbers.begin(),numbers.end(),input);
  20.                         if(exist != numbers.end())
  21.                                 std::cout << "Duplicate number." << std::endl;
  22.                         else
  23.                         {
  24.                                 numbers.push_back(input);
  25.                                 index ++;
  26.                         }       
  27.                 }
  28.         }

  29.     std::cout << "The nonduplicate values are: " << std::endl;
  30.         for (int i : numbers)
  31.         { // c++11 range-based for loop  
  32.                 std::cout << i << std::endl;
  33.     }

  34.     return 0;
  35. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員
系統已重置禁訪用戶到普通用戶和密碼一次

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
12
發表於 2013-11-3 01:17 PM|只看該作者
本帖最後由 fk035372150 於 2013-11-3 01:18 PM 編輯
a221962 發表於 2013-11-3 04:19 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

您的程式確定無誤,不過vector我們要過幾天才會教到,所以有些地方看不太懂!
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
550
積分
153 點
潛水值
29140 米
13
發表於 2013-11-3 01:21 PM|只看該作者
本帖最後由 fk035372150 於 2013-11-3 01:28 PM 編輯
ifiwant 發表於 2013-11-2 11:29 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

不好意思~我遵照您所輸入的數字,並不會產生您圖片上的錯誤耶@@!!
這之間一定有誤會,目前我想到的就只有 ...
...
瀏覽完整內容,請先 註冊登入會員
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部