2012-11-18 42 views
1

我在这里的问题是,我不知道如何插入一个规则,其中如果用户输入的字符串一个数字,它会cout警告说这是不是有效的,同样有如果用户输入的上档次的字符串/字符。怎么样?我一直在尝试,但公式不起作用。如何检查输入是整数/字符串?

int x, cstotal = 100, extotal = 150; 

double scorecs, exscore, labtotala, labtotalb, total; 

string mystr = ""; 

cout << "Compute for: " << "\n" << "1. Laboratory Grade " << "\n" << "2. Lecture Grade" << "\n" << "3. Exit" << "\n"; 
cout << "Please enter a number: "; 
cin >> x; 
switch (x) { 
case 1: 

    cout << "Compute for laboratory grade." << "\n"; 
    cout << "Enter Student Name: "; 
    cin >> mystr; 


    cout << "Good day, " << mystr << " . Please provide the following grades: " << "\n"; 
    cout << "CS Score: "; 
    cin >> scorecs; 

    cout << "Exam Score: "; 
    cin >> exscore; 


    labtotala = scorecs/cstotal * 0.6; 
    labtotalb = exscore/extotal * 0.4; 
    total = labtotala + labtotalb; 
    cout << "Your Laboratory Grade is " << total * 100 << "\n"; 
    system("pause"); 
    break; 
case 2: 
    cout << "Compute for lecture grade." << "\n"; 
    cout << "Enter Student Name: "; 
    cin >> mystr; 
    cout << "Good day, " << mystr << " . Please provide the following grades: " << "\n"; 
    cout << "CS Score: "; 
    cin >> scorecs; 
    cout << "Exam Score: "; 

    cin >> exscore; 
    labtotala = scorecs/cstotal * 0.7; 
    labtotalb = exscore/extotal * 0.3; 
    total = labtotala + labtotalb; 
    cout << "Your Lecture Grade is " << total * 100 << "\n"; 
    system("pause"); 
    break; 
+0

哪一部分规则是给你的麻烦?如何实现检测,控制流,分支?如果只是检测一个字符串是否是数字的问题,则可以遍历每个字符并调用isdigit。 – RonaldBarzell

+0

你需要更具体地了解你在找什么。尽可能少发布代码。 –

回答

1

使用流的.fail()方法。类似下面: -

cin >> aString; 

    std::stringstream ss; 
    ss << aString; 
    int n; 
    ss >> n; 

    if (!ss.fail()) { 
    // int; 
    } else { 
    // not int; 
    } 
4

怎么是这样的:

std::string str; 
std::cin >> str; 

if (std::find_if(str.begin(), str.end(), std::isdigit) != str.end()) 
{ 
    std::cout << "No digits allowed in name\n"; 
} 

上面的代码遍历整个字符串,呼吁std::isdigit每个字符。如果std::isdigit功能的任何字符返回true,这意味着它是一个数字,然后std::find_if返回一个迭代器字符串中的那个地方发现。如果没有找到数字则返回end迭代器。这样我们就可以看到字符串中是否有数字。

的C++ 11标准还引入了新的algorithm functions可以使用的,但它基本上没有以上。这可以用来代替的一个是std::any_of

if (std::any_of(str.begin(), str.end(), std::isdigit)) 
{ 
    std::cout << "No digits allowed in name\n"; 
} 
+0

那么这将会检查一个整数是否是输入的内部?如果是的话,你能解释一下你的代码吗? –

+1

@DylanLittle更新我的答案试图解释它做什么,并链接到引用。使用C++ 11或更高版本时还添加了“更好”的解决方案。 –

+0

ahhh好多了。我现在可以看到发生了什么。 –

9

cin设置一个failbit时,得到一个无效的类型的输入。

int x; 
cin >> x; 

if (!cin) { 
    // input was not an integer 
} 

您还可以使用cin.fail()检查输入是有效的:

if (cin.fail()) { 
    // input was not valid 
} 
3
cout << "\n Enter number : "; 
    cin >> ch; 
    while (!cin) { 
     cout << "\n ERROR, enter a number" ; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cin >> ch; 
    } 
0

你可以使用cin.fail()方法!当cin失败,这将是true,你可以我们while循环来,直到cintrue

cin>>d; 
while(cin.fail()) { 
    cout << "Error: Enter an integer number!"<<endl; 
    cin.clear(); 
    cin.ignore(256,'\n'); 
    cin >> d; 
} 
相关问题