当用户按下Q时它不会退出程序..有什么问题?请帮忙
while (true)
{
//promt to user enter or quit
cout<<" Enter five digit number please or Q to quit \n";
cin>> buf; n = atoi (buf.c_str());
cin.ignore(1000,10);
if( n == 'q' || n == 'Q')
break;
a = n % 10;
b = n / 10000;
if ( ! a == b )
{
cout<< "This is not a palindrome \n";
continue;
}
// checking the palindrome
n = n % 10;
n = n / 100;
if ( a == b )
cout<<" This is palindrome\n";
else
cout<<" This is not a palindrome\n";
}
答案 0 :(得分:1)
如果输入'q'字符,atoi函数不能将此输入解释为数字,因此返回零。 请参阅此链接
http://www.cplusplus.com/reference/cstdlib/atoi/
最重要的是以下段落:
如果str中的第一个非空白字符序列不是有效的整数,或者由于str是空的或者只包含空格字符而不存在这样的序列,则不执行转换并返回零强>
在这种情况下str == buf
答案 1 :(得分:0)
如果您为此计划输入q
或Q
,则不会转换atoi
中的任何内容,n
将0
,{} {1}}或'q'
。如果您在字符集中输入'Q'
或'q'
的数值,但<(1>}或'Q'
分别为113
或81
,则程序将退出
示例:
Enter five digit number please or Q to quit
12345
This is not a palindrome
Enter five digit number please or Q to quit
12321
This is palindrome
Enter five digit number please or Q to quit
q
This is palindrome
Enter five digit number please or Q to quit
113
我会给你进一步的调试/修复。注意 - 您的程序没有正确检查回文。
答案 2 :(得分:0)
如前面的答案中所述,q将通过atoi()转换为0。所以,基本上,为了让程序以q或Q退出,请在
之后使用atoi()转换。if( n == 'q' || n == 'Q')
break;
这样,当你检查程序是否应该退出时,n仍然是q或Q,如果没有,你将n转换为带有atoi()的整数,并检查它是否是回文。
希望我能帮忙
答案 3 :(得分:0)
尝试更改
if( n == 'q' || n == 'Q')
到
if( buf[0] == 'q' || buf[0] == 'Q')
这将访问输入中的第一个字符,并将其与所需字符'Q'或'q'进行比较