//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转换有关。有人可以告诉我如何创建一个有效的退出序列吗?
答案 0 :(得分:3)
您没有可以阅读 q
的代码。您的输入逻辑只接受一个数字。然后测试该数字是否等于q
个字符。字母q
的等效整数是113.如果您尝试,它将退出。
由于你真的想输入一个数字或一个字母,你需要编写可以接受的输入逻辑。然后你需要检查你得到了什么输入,然后相应地处理它。
答案 1 :(得分:1)
'q'是一个角色。 n
是一个整数。
检查n == 'q'
是否会隐式将'q'转换为int
类型 - 因此,如果您输入数字113('q'的ASCII),您的程序将退出。
您可能希望使用常规输入范围之外的数字(例如负值或零)作为终止条件。
附注:在n
循环中检查之前,您没有初始化 while
。 n
可以从任何随机垃圾开始,因此程序在不运行循环的情况下会自发退出的某些时间。你应该使用-Wall -Wextra
(如果使用gcc
)编译代码,让编译器警告你这类明显的东西。