我写了一个程序,所以用户输入一个数字,程序输出它的二进制表示。
我收到此错误:
没有匹配函数来调用`getline(std :: istream&,unsigned int&)'
我该如何解决这个问题?
此外,它输出:
0
0
0
0
...当它输出正确的输入值时。
#include <iostream>
using namespace std;
int main()
{
int Number;
cin >> Number;
bool Binary[sizeof(int) * CHAR_BIT];
for (unsigned int i = 0; i < sizeof(int) * CHAR_BIT; i++)
Binary[(sizeof(int) * CHAR_BIT - 1) - i] = Number & (1 << i);
for (unsigned int i = 0; i < sizeof(int); i++)
std::cout << Binary[i] << std::endl;
system("pause");
return 0;
}
答案 0 :(得分:9)
getline()
函数需要istream
和 string
,而不是整数。所以:
string sNumber;
getline(cin, sNumber);
// now convert sNumber to an unsigned int
答案 1 :(得分:2)
std::getline()
将行添加到std::string
变量中。您需要自己将其转换为unsigned int
。通常的方法是使用std::istringstream
实例,如下所示:
#include <sstream>
#include <iostream>
#include <iomanip>
int main ()
{
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
unsigned int number = 0U;
if (!(iss >> number))
{
// Handle error
}
else
{ // Put your binary conversion logic in a function!
std::cout << to_binary(number) << std::endl;
}
}
提示:缩进可以极大地提高代码的可读性和可维护性。
将二进制转换逻辑放入函数将使测试更容易(想象"unit-test")并重用,如下所示:
// I've left this logic untouched other than to indent it and to introduce
// braces. It needs to be fixed. Declare before main().
std::string to_binary(unsigned int Number)
{
std::ostringstream oss;
bool Binary[sizeof(int) * CHAR_BIT];
for (unsigned int i = 0; i < sizeof(int) * CHAR_BIT; i++)
{
Binary[(sizeof(int) * CHAR_BIT - 1) - i] = Number & (1 << i);
}
for(unsigned int i = 0; i < sizeof(int); i++)
{
oss << Binary[i] << std::endl;
}
return oss.str();
}
我已经将二进制转换逻辑更正为练习,因为这看起来像是家庭作业。
答案 2 :(得分:1)
getline
只能用于以字符串形式读取整行。如果您想阅读数字,请使用operator>>
。
示例:
int number;
std::cin >> number;
答案 3 :(得分:1)
答案 4 :(得分:0)
以下是getline的有效签名:
istream& getline(char*, int, char = '\n');
istream& getline(signed char*, int, char = '\n');
istream& getline(unsigned char*, int, char = '\n');
您没有使用其中任何一个
答案 5 :(得分:-1)
将getline(cin, Number)
更改为cin >> Number