结束交互式程序会导致无限循环

时间:2012-02-12 06:23:58

标签: c++ while-loop

//Testing numbers for primality

#include <iostream>
#include <cmath>
using namespace std;

int main() {

int n;          //User input number
int i;          //Input number will be divided by i
int count;      

count = 0;

cout << endl;   

while(n != 'q') {

    cout << "#: ";
    cin >> n;       

    for(i = 1; i <= n; i++) {   
                    //increase the divisor until it's equal to n                
        if(n % i == 0) {
             count++;
        }       
        //If there is no remainder, count increases by 1. Since prime numbers are only divisible by 1 and themselves, count will be exactly 2 in the case of a prime number.

    }

    if(count == 2) {
        cout << "   1\n";       //1 = yes prime

    }else if(count != 2) {      
        cout << "   0\n";       //0 = not prime

    }

    count = 0;

}

if(n == 'q') {
    return(0);
}
}

我在这里测试数字,看看它们是否是素数。每当除数n / i的余数为0时,计数增加,因此当count = 2时,输出为1表示是,否则0表示否。我已经得到程序在会话期间测试尽可能多的数字,但我正在尝试创建一个转义序列。

我尝试使用条件(n =='q')进行退出,但是当我输入q时,程序无限循环。我试着休息一下; while循环中此条件的语句但结果是相同的。我猜这个问题与char-int / int-char转换有关。有人可以告诉我如何创建一个有效的退出序列吗?

2 个答案:

答案 0 :(得分:3)

您没有可以阅读 q的代码。您的输入逻辑只接受一个数字。然后测试该数字是否等于q个字符。字母q的等效整数是113.如果您尝试,它将退出。

由于你真的想输入一个数字一个字母,你需要编写可以接受的输入逻辑。然后你需要检查你得到了什么输入,然后相应地处理它。

答案 1 :(得分:1)

'q'是一个角色。 n是一个整数。

检查n == 'q'是否会隐式将'q'转换为int类型 - 因此,如果您输入数字113('q'的ASCII),您的程序将退出。

您可能希望使用常规输入范围之外的数字(例如负值或零)作为终止条件。

附注:在n循环中检查之前,您没有初始化 whilen可以从任何随机垃圾开始,因此程序在不运行循环的情况下会自发退出的某些时间。你应该使用-Wall -Wextra(如果使用gcc)编译代码,让编译器警告你这类明显的东西。