0

当用户按 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";

}
4

4 回答 4

1

如果输入“q”字符,则 atoi 函数无法将此输入解释为数字,因此返回零。请参考此链接

http://www.cplusplus.com/reference/cstdlib/atoi/

最重要的是以下段落:

如果 str 中的第一个非空白字符序列不是有效整数,或者由于 str 为空或仅包含空白字符而不存在此类序列,则不执行转换并返回零。

在这种情况下 str == buf

于 2013-08-27T21:00:56.353 回答
0

尝试改变

if( n == 'q' || n == 'Q')

if( buf[0] == 'q' || buf[0] == 'Q')

这将访问输入中的第一个字符并将其与所需的字符 'Q' 或 'q' 进行比较

于 2013-08-27T22:42:18.537 回答
0

如果你进入这个q程序Q,它不会转换任何东西atoi,并且n会是0,不是'q''Q'。但是,如果您在字符集中输入或的数值,程序退出(分别为或)。'q''Q'11381

例子:

 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 

我将把进一步的调试/修复留给你。注意 - 您的程序没有正确检查回文。

于 2013-08-27T20:48:40.443 回答
0

如前面的答案所述,q 将使用 atoi() 转换为 0。所以,基本上,为了让程序退出 aq 或 Q,使用 atoi() 转换后

if( n == 'q' || n == 'Q')
     break;

这样,当您检查程序是否应该退出时,n 仍然是 q 或 Q,如果不是,则使用 atoi() 将 n 转换为整数并检查它是否是回文。

希望我能帮上忙

于 2013-08-27T22:33:18.403 回答