2013-02-12 24 views
1

下面我有一個代碼,我想cin某些值。如果我cin [它應該忽略它。但是如果用戶插入一個數字而不是一個[它應該將char轉換爲一個int並將其插入到rows的else函數中。我怎樣才能將這個字符轉換爲int並將其放入rows將字符串轉換爲int如果數字

char ignoreChar; 

    is >> ignoreChar; 

    if(ignoreChar == '[') 
    { 
    } 

    else 
    { 
    rows = ignoreChar; 
    } 
+0

什麼是'rows'?一個'int'? – 2013-02-12 16:07:10

+0

你確定只允許使用'cstdlib'嗎?因爲那看起來像是''對我來說 – 2013-02-12 16:08:39

+0

假裝行已經在 – mystycs 2013-02-12 16:08:42

回答

0

如果他們只輸入一個字符,你應該可以輸入它。

int a =(int)whateverNameOfChar;

這將其轉換爲它的ASCII數字,但這樣你就必須減去「0」

0

要轉換char,你知道是'0''9'一個到該數值的int,你可以簡單地做:

rows = ignoreChar - '0'; 

這是可行的,因爲數字字符保證具有標準的連續值。

如果您需要確定char是否是數字,您可以使用std::isdigit(ignoreChar)或簡單條件ignoreChar >= '0' && ignoreChar <= '9'

1

如果採取適當的照顧,該ignoreChar將包含一個數字,你可以很容易地將其轉換成整數是這樣的:一定的字符是否代表一個數字

rows = ignoreChar - '0'; 

std::isdigit()功能可用於檢查。

你可以採取下面的示例程序作爲一個靈感:

#include <iostream> 

using namespace std; 

int main() 
{ 
    int i = -1; // Equivalent of your "rows" 

    char c; // Equivalent of your "ignoreChar" 
    cin >> c; 

    if (std::isdigit(c)) 
    { 
     i = c - '0'; 
    } 
    else 
    { 
     // Whatever... 
    } 

    cout << i; 
} 
0

有幾種不同的方法來「讀取用戶輸入」。

哪一個最好,取決於輸入的格式和樣式。你可以考慮兩種不同的格式,「Linebased」和「自由形式」。自由格式將被輸入爲C源代碼,您可以在其中隨意添加換行符,空格等。

Linebased有一個設置的格式,其中每行包含一組給定的輸入[不一定是相同數量的輸入,但行結束終止該特定輸入]。

在一個自由形式的輸入中,你必須閱讀一個字符,然後確定「這個特定部分的含義是什麼」,然後決定怎麼做。有時您還需要使用peek()函數來檢查下一個字符是什麼,然後根據該字符確定要執行的操作。

在基於行的輸入中,您使用getline()來讀取一行文本,然後將其分成您需要的任何格式,例如使用stringstream

接下來,您必須決定是否編寫自己的代碼(或使用一些基本的標準翻譯代碼)或使用stream函數來解析數字。編寫更多的代碼將爲您提供更好的方法來處理諸如「1234aqj」不是數字的錯誤,但stream只會在該字符串中達到「a」時停止讀取。

0

對不起,代碼比可能長得多。下面是一個「階乘計數」的例子代碼,在處理時輸入符號。我試圖展示不同的可能性。我現在看到的唯一問題是,如果用戶剛輸入沒有輸入任何符號的回車,就沒有任何反應。這是我在這裏的第一篇文章,所以我很抱歉,任何可能的字體,格式和其他廢話。 MaxNum = 21是根據經驗確定的無符號long long int返回類型。

我已經籤這樣的輸入情況:ABCDE 2. -7 22 21

#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <cstdlib> 

unsigned long long int CalcFact(int p) 
    { return p == 0 || p == 1 ? 1 : p*CalcFact(p-1); } 

int main() 
{ 
int MaxNum = 21, HowMany = 0, MaxAttempts = 5, Attempts = 0; 
char AnyKey[] = "", *StrToOut = "The factorial of ", Num[3] = ""; 
bool IsOK = 0; 

while(!IsOK && Attempts++ < MaxAttempts) 
{ 
    std::cout << "Please enter an integer > 0 and <= 21: "; 
    std::cin.width(sizeof(Num)/sizeof(char)); 
    std::cin >> Num; 
    for(int Count = 0; Count < strlen(Num); Count++) 
     IsOK = isdigit(Num[Count]) ? true : false; 
    if(IsOK) 
    { 
     if(!(atoi(Num) >= 0 && atoi(Num) <= MaxNum)) 
      IsOK = false; 
     else 
     { 
      for(int Count = 0; Count <= MaxNum; Count++) 
       { 
       std::cout << StrToOut << Count << std::setfill('.') 
       << std::setw(Count < 10 ? 30 : 29) 
       << CalcFact(Count) << std::endl; 
       } 
     } 
    } 
    if(!IsOK && Attempts > 0) 
    { 
     std::cin.clear(); 
     std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
    } 
} 
if(!IsOK) 
    return -1; 
else 
    std::cin >> AnyKey; 
return 0; 
}