【问题标题】:program that tells if a number is prime判断一个数是否为素数的程序
【发布时间】:2016-02-10 16:35:03
【问题描述】:

你输入一个数字,程序会判断这个数字是否是素数 所以当我第一次输入数字 7 时,它会告诉你“这个数字是素数” 然后我输入 8,它会告诉你“这个数字不是素数” 之后我重新输入数字 7,它会显示“数字不是素数” 我不知道问题出在哪里 请帮我 an example photo from here 我的代码是:

#include <stdio.h>
#include <stdlib.h>

int main (void){
int n;
int t;
int isPrime=0;
char var;

while(var!='q'){
    printf("q=quit  p=prime  :");
    fflush(stdin);
    scanf("%c",&var);
    if(var=='p'){
        printf("plz put the number value :");
        scanf(" %d",&n);
        for(t=2;t<=n/2;t++){
            if (n%t==0){
                isPrime=1;
                break;
            }
        }
        if(isPrime==0){
            printf("%d is a prime number\n",n);
        }
        else{
            printf("%d is not a prime number\n",n);
        }
    }
    else if(var=='q'){
        printf("thank you bye\n");
        break;
    }
    else{
        printf("a wrong letter\n");
    }
}
return 0;
}

【问题讨论】:

  • 什么是fflush (stdin)
  • 你之前问过这个。我知道,因为您使用了相同的非常糟糕标题...请阅读How do I ask a good question? - 并且,只要您有时间,请阅读tour
  • @EdHeal:这是微软的特质。
  • 谢谢你,考虑到晚餐里的辣椒,我猜我今晚的一些“stdin”会很热“stdout”
  • @EdHeal 不要忘记刷新:-p

标签: c if-statement scanf primes


【解决方案1】:

每次用户输入数字时,您都需要将isPrime 设置为0。否则,它仍然保留前一个数字的值。

移动变量声明

int isPrime = 0;

while 循环内。

顺便说一句,那个变量名不是倒过来的吗?当您发现有一个数字将其平分时,您将其设置为1(即true)。但那是数字不是素数的时候。

【讨论】:

    【解决方案2】:

    您忘记在“while”循环内将 isPrime 重置为零。

    按照他们的方式,看起来您这样做是为了学习。很好,没有比尝试更好的学习方式了。

    这里有一个 C 中的提示,任何非零值都被视为“真”,而零被视为“假”。所以不要这样:

    if (myFlag==1) { ... do something }
    

    就这样写吧:

    if (myFlag) { ... do something }
    

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 2011-05-24
      • 2010-12-05
      • 2017-03-05
      • 2018-06-23
      • 2018-01-16
      • 2015-02-08
      相关资源
      最近更新 更多