输入大于9 x的值后,为什么我不能输入更多输入?

时间:2015-10-09 21:23:15

标签: c loops scanf

#include <stdio.h>
main()
{
    int n;
    int x;
    int h=24;
    int s=9;
    scanf("%d",&n);
    while (n>0)
    {
        n=n-1;
        scanf("%d",&x);
        while (x<=9)
        {
            if (x==1)
                printf("2\n");
            if (x==2)
                printf ("3\n");
            if (x==3)
                printf ("5\n");
            if (x==4)
                printf("7\n");
            if (x==5)
                printf("11\n");
            if (x==6)
                printf("13\n");
            if (x==7)
                printf("17\n");
            if (x==8)
                printf("19\n");
            if (x==9)
                printf("23\n");
            break;
        }
        while (23<h<542 && x>9)
        {
            h=h+1;
            if ( (h%2)!=0 && (h%3)!=0 && (h%5)!=0 && (h%7)!=0 && (h%11)!=0 && (h%13)!=0 && (h%17)!=0 && (h%19)!=0 && (h%23)!=0 )
            {
                s=s+1;
                if (x==s)
                    printf("%d\n",h);

            }     
       }        
 }

}

代码的问题是输入n,它将是以下输入的数量。每个输入必须给出第x个素数。 例如:

输入: 3 ,4 ,20 50 输出: 7 ,71 ,229

x可以在1到100之间。(前100个素数) 现在我的问题是x&gt; 9.输入一个值后,它将不再接受x的值。

我想知道为什么会发生这种情况以及如何解决它。

我也是编程方面的新手,还没有学过数组。(我知道scanfs并不是最好的东西,但到目前为止我都学到了这一点)

1 个答案:

答案 0 :(得分:0)

这一行:

while (23<h<542 && x > 9)

x大于9时创建无限循环。 23 < h < 542不会测试h是否在23542之间。该表达式相当于(23 < h) < 542。如果(23 < h)小于1,则23h,因为h24开头且循环增加1,因此总是如此。 542始终小于if (x > 9) { while (h < 542) ... } }

你想要的是:

x

每次循环都不需要测试23 < h,因为它永远不会在循环中发生变化。而且没有必要测试23 < h && h < 542,因为这总是正确的。

如果确实需要检查变量是否在两个数字之间,那么使用h的方法就是这样。

另一个问题是,当您输入多个高于9的数字时,您不会在寻找更高质数的s循环之前将whilex重置回其初始值。您应该在循环之前初始化这些值,而不仅仅是在程序的顶部。

你也可以使用cascaded if / else if / else,这样你就不需要在最后测试switch/case(或者你可以使用#include <stdio.h> main() { int n; int x; scanf("%d",&n); while (n>0) { n=n-1; scanf("%d",&x); if (x==1) { printf("2\n"); } else if (x==2) { printf ("3\n"); } else if (x==3) { printf ("5\n"); } else if (x==4) { printf("7\n"); } else if (x==5) { printf("11\n"); } else if (x==6) { printf("13\n"); } else if (x==7) { printf("17\n"); } else if (x==8) { printf("19\n"); } else if (x==9) { printf("23\n"); } else { int h = 24; int s = 9; while (h<542) { h=h+1; if ( (h%2)!=0 && (h%3)!=0 && (h%5)!=0 && (h%7)!=0 && (h%11)!=0 && (h%13)!=0 && (h%17)!=0 && (h%19)!=0 && (h%23)!=0 ) { s=s+1; if (x==s) { printf("%d\n",h); } } } } } } )。

这是完整的重写程序:

//Add authentication headers as params
var params = {
    access_token: 'An access_token',
    other_header: 'other_header'
};

//Add authentication headers in URL
var url = [url_generating_pdf, $.param(params)].join('?');

//Open window
window.open(url);

DEMO