gpt4 book ai didi

c++ - 如何只允许变量中的数字?

转载 作者:行者123 更新时间:2023-11-30 01:08:29 25 4
gpt4 key购买 nike

我的代码有一些问题,这是我遇到问题的部分代码。

这段代码的要点是,如果用户输入的不是数字,例如字符 p,程序应该要求用户再次输入,这部分有效。

如果用户输入数字和字符的组合,程序应该要求用户再次输入。例如 n1212n 无效。

字符在前的部分,如 n12 不会导致问题,但问题出现在数字在前而其他内容在后的地方,如 12n,这无效,但我的代码打印出数字 12 后又说该数字无效。

#include <iostream>

using namespace std;

int main ()
{
int n;

while(1)
{

cout<<"Enter a number, 0 for exit: ";
cin>>n;

if(!cin)
{
cout<<"You didnt enter a valid number\n";
cin.clear();
cin.ignore(1000,'\n');
continue;
}
cout<<"Number is: "<<n<<endl;

if(n==0) return 0;
}
}

代码输出示例:

Enter a number, 0 for exit: 12
Number is: 12

Enter a number, 0 for exit: n
You didnt enter valid number

Enter a number, 0 for exit: n12
You didnt enter valid number

4° <--- 这个不能正常工作

Enter a number, 0 for exit: 12n
Number is: 12
Enter a number, 0 for exit: You didnt enter valid number

编辑:如果可能的话,我想在不包含额外库的情况下解决这个问题。

最佳答案

你可以使用 isdigit() , std::stringstd::all_of()来自其他标准库(没关系,不是矫枉过正),像这样(将输入存储在字符串中,然后检查 isdigit 函数是否对字符串的每个字符都成功,这意味着输入是纯数字的案例):

#include <iostream>
#include <cctype>
#include <string>

int main()
{
std::string str;
std::cin >> str;
(std::all_of(str.begin(), str.end(), [] (char c) { return isdigit(c); })) ? std::cout << "It's a number!\n" : std::cout << "isdigit() failed\n";
return 0;
}

输出:

Georgioss-MacBook-Pro:~ gsamaras$ g++ -Wall -std=c++0x main.cpp 
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
4
It's a number!
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
f
isdigit() failed
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
12n
isdigit() failed

关于c++ - 如何只允许变量中的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com