gpt4 book ai didi

C++ - isdigit 无法正常工作并导致永无止境的循环

转载 作者:行者123 更新时间:2023-11-28 07:03:59 25 4
gpt4 key购买 nike

我正在创建一个将十进制值转换为二进制值的程序。我遇到的问题是,在我的 if 语句中,我正在检查我的 int decimal 变量的用户输入是否包含数字,然后再继续转换值,但是当它是数字时,它将它们视为字母字符,然后导致程序无限循环。

当我将 isdigit(decimal) 更改为 !isdigit(decimal) 时,转换有效,但如果我输入字母字符,它将再次无限循环。我真的在做傻事吗?

#include <iostream>
#include <string>
#include <ctype.h>
#include <locale>

using namespace std;

string DecToBin(int decimal)
{
if (decimal == 0) {
return "0";
}
if (decimal == 1) {
return "1";
}

if (decimal % 2 == 0) {
return DecToBin(decimal/2) + "0";
}
else {
return DecToBin(decimal/2) + "1";
}
}

int main()
{
int decimal;
string binary;

cout << "Welcome to the Decimal to Binary converter!\n";

while (true) {
cout << "\n";
cout << "Type a Decimal number you wish to convert:\n";
cout << "\n";
cin >> decimal;
cin.ignore();
if (isdigit(decimal)) { //Is there an error with my code here?
binary = DecToBin(decimal);
cout << binary << "\n";
} else {
cout << "\n";
cout << "Please enter a number.\n";
}
}

cin.get();
}

最佳答案

首先,要检查数字和字符混合的数字,不要将输入输入到 int 中。始终使用 std::string

int is_num(string s)
{
for (int i = 0; i < s.size(); i++)
if (!isdigit(s[i]))
return 0;
return 1;
}

int main()
{
int decimal;
string input;
string binary;
cout << "Welcome to the Decimal to Binary converter!\n";
while (true) {
cout << "\n";
cout << "Type a Decimal number you wish to convert:\n";
cout << "\n";
cin >> input;
cin.ignore();
if (is_num(input)) { //<-- user defined function
decimal = atoi(input.c_str()); //<--used C style here
binary = DecToBin(decimal);
cout << binary << "\n";
} else {
cout << "\n";
cout << "Please enter a number.\n";
}
}
cin.get();
}

您总是可以编写一个函数来检查字符串中的数字,如上所示。现在您的代码不会陷入无限循环。此外,如果你只想接受一个有效输入并退出程序,你可以添加一个 break

if (is_num(input)) {
decimal = atoi(input.c_str());
binary = DecToBin(decimal);
cout << binary << "\n";
break; //<--
}

关于C++ - isdigit 无法正常工作并导致永无止境的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22040905/

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