下面我有一个代码,我想要cin一定的值。如果我发现[它应该忽略它。但是如果用户插入一个数字而不是[
,它应该将char转换为int并将其插入到else函数中的rows
中。如何将此char转换为int并将其放入rows
?
char ignoreChar;
is >> ignoreChar;
if(ignoreChar == '[')
{
}
else
{
rows = ignoreChar;
}
答案 0 :(得分:1)
如果您认真对待ignoreChar
将包含数字,您可以通过这种方式轻松将其转换为整数:
rows = ignoreChar - '0';
std::isdigit()
函数可用于检查某个字符是否代表数字。
您可以将以下示例程序作为灵感:
#include <iostream>
using namespace std;
int main()
{
int i = -1; // Equivalent of your "rows"
char c; // Equivalent of your "ignoreChar"
cin >> c;
if (std::isdigit(c))
{
i = c - '0';
}
else
{
// Whatever...
}
cout << i;
}
答案 1 :(得分:0)
如果他们只输入一个角色,你应该能够输入它。
int a =(int)whateverNameOfChar;
这会将它转换为它的ASCII码,但你必须减去'0'
答案 2 :(得分:0)
要将您知道的char
'0'
'9'
int
转换为该数字值的rows = ignoreChar - '0';
,您只需执行以下操作:
char
这是有效的,因为数字字符保证按标准具有连续值。
如果您需要确定std::isdigit(ignoreChar)
是否为数字,则可以使用ignoreChar >= '0' && ignoreChar <= '9'
或{{1}}的简单条件。
答案 3 :(得分:0)
“阅读用户输入”有几种不同的方法。
哪一种效果最好,取决于输入的格式/样式。您可以考虑两种不同的格式,“Linebased”和“free form”。自由格式将像C源代码一样输入,您可以在任何地方添加换行符,空格等。
Linebased有一个设置格式,其中每一行包含一组给定的输入[不一定是相同数量的输入,但行尾终止该特定输入]。
在自由格式输入中,您必须阅读一个字符,然后确定“此特定部分的含义是什么”,然后决定要做什么。有时您还需要使用peek()
函数来检查下一个字符是什么,然后根据它确定要执行的操作。
在基于行的输入中,您使用getline()
读取一行文本,然后将其拆分为您需要的任何格式,例如使用stringstream
。
接下来,您必须决定是编写自己的代码(或使用一些基本的标准翻译代码)还是使用stream
函数来解析示例数字。编写更多代码将为您提供更好的方法来处理错误,例如“1234aqj”不是数字,但stream
只会在该字符串中达到'a'时停止读取。
答案 4 :(得分:0)
很抱歉代码比可能的长得多。下面是“因子计数”的示例代码,其中输入符号及其处理。我试图展示不同的可能性。我现在看到的唯一问题是,如果用户只是输入没有输入任何符号的Enter,就没有任何反应。这是我在这里的第一篇文章,所以我对任何可能的字体,格式和其他废话感到非常抱歉。 MaxNum = 21是根据经验为unsigned long long int返回类型定义的。
我检查过这样的输入案例:abcde 2. -7 22 21
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>
unsigned long long int CalcFact( int p )
{ return p == 0 || p == 1 ? 1 : p*CalcFact(p-1); }
int main()
{
int MaxNum = 21, HowMany = 0, MaxAttempts = 5, Attempts = 0;
char AnyKey[] = "", *StrToOut = "The factorial of ", Num[3] = "";
bool IsOK = 0;
while( !IsOK && Attempts++ < MaxAttempts )
{
std::cout << "Please enter an integer > 0 and <= 21: ";
std::cin.width(sizeof(Num)/sizeof(char));
std::cin >> Num;
for( int Count = 0; Count < strlen(Num); Count++ )
IsOK = isdigit(Num[Count]) ? true : false;
if( IsOK )
{
if( !(atoi(Num) >= 0 && atoi(Num) <= MaxNum) )
IsOK = false;
else
{
for( int Count = 0; Count <= MaxNum; Count++ )
{
std::cout << StrToOut << Count << std::setfill('.')
<< std::setw( Count < 10 ? 30 : 29 )
<< CalcFact(Count) << std::endl;
}
}
}
if( !IsOK && Attempts > 0 )
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
if( !IsOK )
return -1;
else
std::cin >> AnyKey;
return 0;
}