電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[C++]請問cin.get()

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
david870620
稍嫌羞澀的路人


註冊時間: 2011-02-11
文章: 3
來自: 地球
69.41 果凍幣

發表發表於: 2011-3-8, PM 10:53 星期二    文章主題: [C++]請問cin.get() 引言回覆

請問一下:
為什麼我用cin.get()去讀取字元,我故意同時輸入很多字元時,進入無限迴圈??
照理來說 cin.get()應該只會讀取所輸入的第一個字元,為什麼會產生和cin >>一樣的問題?
順便附上發生錯誤的檔案原始碼:
代碼:
#include <iostream>
#include <cstdlib>
#include <cctype>
#include <ctime>
using namespace std;
int Two_of_one (char*, char*);
int answer, upper = 100, lower = 1;
int main ()
{
    char Tryagain;
    char name1[100];
    char name2[100];
    cout << "請輸入<玩家1>的名字:" << endl;
    cin.getline(name1, 100);
    cout << "請輸入<玩家2>的名字:" << endl;
    cin.getline(name2, 100);
    do
    {
        srand (time(NULL));
        answer = (rand ()%98)+2;
        cout << "答案不包括1、100這兩個數字" << endl;
        for (int Result = 0;;)
        {
            Result = Two_of_one(name1, name2);
            if (Result != 0)   break;
            Result = Two_of_one(name2, name1);
            if (Result != 0)   break;
        }
        upper = 100; lower = 1;
        cout << "再來一局?(y):" ;
        cin.get();
        cin.get(Tryagain);                                             // <----------就是這裡
    } while (Tryagain == 'Y');
    return 0;
}
int Two_of_one (char* name1, char* name2)
{
    int player_ans;
    cout << "目前數字範圍: " << lower << "~" << upper << endl
         << "<" << name1 << ">請輸入"<< lower << "~" << upper << "的數字:" << endl;
    cin >> player_ans;
    if( cin.fail() )
    {
        cin.clear();
        char ch1;
        cin >> ch1;
        cout << "錯誤型態的輸入!" << endl;
    }
    while (player_ans >= upper || player_ans <= lower)
    {
        cout << "<" << name1 << ">你輸入了不合規定的數字,請重新輸入!" << endl
             << "<" << name1 << ">請輸入"<< lower << "~" << upper << "的數字:" << endl;
        cin >> player_ans;
    }
    if (player_ans == answer)
    {
        cout << "答案正是:" << answer << " 抱歉,<" << name1 << "> 你輸了! 恭喜<" << name2 << " >!你贏了這場比賽!" << endl;   return 1;
    }
    else if (player_ans > answer)
    {
        upper = player_ans;   return 0;
    }
    else
    {
        lower = player_ans;   return 0;
    }
}
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站 AIM Address 雅虎訊息通 MSN Messenger
撲殺兔
時常出沒的會員


註冊時間: 2009-05-18
文章: 30

219.89 果凍幣

發表發表於: 2011-3-11, PM 8:14 星期五    文章主題: 引言回覆

假設我輸入 "Yes"

cin.get(Tryagain); <- 'Y'

cin >> player_ans; <- 'e' //失敗

cin >> ch1; <- 'e'
cout << "錯誤型態的輸入!" << endl;

cout << "<" << name1 << ">你輸入了不合規定的數字,請重新輸入!" << endl
<< "<" << name1 << ">請輸入"<< lower << "~" << upper << "的數字:" << endl;
cin >> player_ans; <- 's' //失敗

cout << "<" << name1 << ">你輸入了不合規定的數字,請重新輸入!" << endl
<< "<" << name1 << ">請輸入"<< lower << "~" << upper << "的數字:" << endl;
cin >> player_ans; <- 's' //失敗

cout << "<" << name1 << ">你輸入了不合規定的數字,請重新輸入!" << endl
<< "<" << name1 << ">請輸入"<< lower << "~" << upper << "的數字:" << endl;
cin >> player_ans; <- 's' //失敗
.
.
.
.
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作