如何检查整数?

How to check for a whole number?

提问人:WolfHasQuack 提问时间:10/25/2023 最后编辑:WolfHasQuack 更新时间:10/26/2023 访问量:143

问:

我正在学习 C++ 并检查输入是否为质数。我不能有任何复杂的事情,因为这是为初学者课程中的固执老师准备的。每个 if 语句都运行,但第一个语句除外,它检查是否为整数。这是我的程序:userInput

#include <iostream>
#include <cmath>

using namespace std;

int main(){
    int userInput;
    bool isPrime = true;
    
    while (true){
        cout << "Enter a number to check if it is a prime number: ";
        cin >> userInput;
    
        if (floor(userInput) != ceil(userInput)){
            cout << "Please type a whole number.\n\n";
            continue;
        } else if (userInput == 1){
            cout << "This is not a prime number!\n\n";
            continue;
        } else if (userInput <= 0){
            cout << "Please type a postive integer.\n\n";
            continue;
        }

        for (int i = 2; i <= sqrt(userInput); ++i) {
            if (userInput % i == 0) {
                isPrime = false;
                break;
            } else {
                isPrime = true;
            }
        }
   
        if (isPrime){
            cout << userInput << " is a prime number.\n\n";
        } else {
            cout << userInput << " is not a prime number!\n\n";
        }

        cin.clear();                                                // clears errors if input generated error flags so the program can successfully wait for user
        cin.ignore(numeric_limits<streamsize>::max(), '\n');        // clears the input buffer by ignoring all (max) characters
        cout << "Press Enter to continue...";    
        cin.get();                                                  // gets the key that was pressed
    }
    
    return 0;
}

我尝试了以下代码作为该特定 if 语句中的条件,但终端始终只输出“(转换为 int 的双精度)不是质数!

  • userInput != (int)userInput
  • floor(userInput) != ceil(userInput)
  • userInput != (int)userInput
  • userInput == (double)userInput //prints "Enter a number to check if it is a prime number: Please type a whole number.
  • userInput != static_cast<int>(userInput) //prints "Enter a number to check if it is a prime number: Please type a whole number.
  • floor(userInput) != userInput
  • modf(castedUserInput, &intpart) == 0.0 // declared two double variables earlier: double castedUserInput = (double)userInput; and double intpart; -prints "Enter a number to check if it is a prime number: Please type a whole number

很明显,其中一些应该可以工作,那么我的其余代码有什么问题呢?也偏离了主题,但是如果我仍然希望用户收到“请输入以继续......”的提示,则在if语句中使用错误的关键字是错误的。最后?正如预期的那样,整个循环只是重新启动,但我希望它到达 while 循环的末尾。continue

老师的指示:

  • 编写一个程序,要求用户提供整数。
  • 读取输入。
  • 检查它是否为正整数。继续向用户询问 一个正整数,直到用户给你一个正整数 数。确保你抓住了角色。
  • 检查变量是否为质数,用 相应的验证,如示例可执行文件所示。
  • 告诉用户按 Enter 键再次运行程序。
  • 遵守良好的编程实践和结构 程序。
  • 不要忘记评论,停止屏幕,代码间距和 输出,使其释放等。
  • 对于程序的标题,请使用“所见即所得” 方法“(多行中只有一个 cout 语句)。
C++ 强制转换

评论

8赞 463035818_is_not_an_ai 10/25/2023
userInput是一个 .没有“被强制转换为 int 的替身”,也不清楚您对 int 的期望是什么intfloor(userInput) != ceil(userInput)
4赞 463035818_is_not_an_ai 10/25/2023
“我已经尝试了以下代码作为该特定if语句中的条件...”做什么?要检查用户是否输入了整数? 只能是整数。如果用户输入了其他内容处于错误状态,但无法通过查看来判断userInputstd::cinuserInput
2赞 Wyck 10/25/2023
整数只是一个非负整数。你已经声明为整数(有),所以它不能存储小数点后有数字的小数(例如 3.14),所以你可以通过检查来检查它是否是整数注意,稍后你还会检查它是否是严格正数,所以整个“整”检查可能是多余的。似乎您打算检查“它是否是整数” - 根据定义,它是凭借其声明的类型。userInputint userInputif (userInput >= 0)
5赞 Andrej Podzimek 10/25/2023
请删除 .(这是初学者课程中固执的老师应该告诉你的第一件事。在您的代码中,您对整数的期望和执行的操作是什么?将整数转换为 or(参数类型),然后将函数应用于结果,如果浮点数的密度足够,则生成相同的整数,如果整数落入浮点数的低密度范围,则可能会生成略低或较高的整数,这可能无法精确表示所有整数。using namespace std;floor()ceil()floatdouble
4赞 Jabberwocky 10/25/2023
@WolfHasQuack你显然有一个糟糕的老师......

答: 暂无答案