scanf不起作用(整数)

尤西比奥·加西亚(Eusebio Garcia)

当我执行代码时,scanf("%d", &n);不要扫描任何内容,我的意思是,如果输入任何数字,无论输入的数字是什么,它都不会执行任何操作。

void testEsPrimo() {
    int n; 

    printf("Comprobando si un número es o no primo\n");
    printf("Teclee un número entero: ");
    fflush(stdout);

    scanf("%d", &n);  //<---- The problem ?

    if(esPrimo(n) == cierto){
        printf("%d es primo\n", n);
    }else{
        printf("%d NO es primo\n", n);
    }

    fflush(stdout);
}


Logico esPrimo(int n){
int divisor;
int esPrimox;
for(divisor = 2; sqrt(n); divisor++) {
    if(n <= 0) {
        return falso;
    } else {
        if(n%divisor == 0) {
            esPrimox = 0;
        } else {
            esPrimox =1;
        }
    }

}
if(esPrimox == 1) {
    return cierto;
}

return falso;

}

这是我的esPrimo代码,用于确定数字是否为质数。

typedef enum {falso, cierto} Logico;

这是Logico,在.h文件中定义

PD:这是我使用C语言的第一步,因此我的代码可能很糟糕。PD2:对不起,我的英语不好,我不是母语,我的英语不是很好。

松德斯利奇

scanf是完美的。

我认为您的错误是for的循环esPrimo实际上,您有一个无限循环,因为sqrt(n)它始终具有相同的值,并且不是布尔表达式。

更改循环:

for(divisor = 2; sqrt(n); divisor++) {
        if(n <= 0) {
            return falso;
        } else {
            if(n%divisor == 0) {
                esPrimox = 0;
            } else {
                esPrimox =1;
            }
        }

    }

为了这:

 for(divisor = 2; divisor < sqrt(n); divisor++) {
            if(n <= 0) {
                return falso;
            } else {
                if(n%divisor == 0) {
                    esPrimox = 0;
                } else {
                    esPrimox =1;
                }
            }

        }

但是,当您知道自己的号码不是素数时,就会遇到问题:您必须完成循环。你可以这样做:

for(divisor = 2; divisor < sqrt(n); divisor++) {
            if(n <= 0) {
                return falso;
            } else {
                if(n%divisor == 0) {
                    esPrimox = 0;
                } else {
                    esPrimox =1;
                    break;
                }
            }

        }

但是,如果您可以避免break在循环中使用它,请不要使用它。对于复杂的算法,您将获得一个清晰的代码,但是当您阅读一个循环时,通常您会理解该循环执行了准确的迭代次数。如果还有另一个标志可以结束循环,请使用while

While (divisor < sqrt(n) && esPrimox == 0){
            if(n <= 0) {
                return falso;
            } else {
                if(n%divisor == 0) {
                    esPrimox = 0;
                } else {
                    esPrimox =1;
                }
            }

        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scanf检查整数的读取不起作用

来自分类Dev

整数解析不起作用

来自分类Dev

tcflush为什么对scanf不起作用?

来自分类Dev

CMake整数比较不起作用

来自分类Dev

CMake整数比较不起作用

来自分类Dev

Elasticsearch整数范围查询不起作用

来自分类Dev

在Python中反转整数不起作用

来自分类Dev

Scanf for double在Dev C ++中不起作用

来自分类Dev

C语言scanf-fflush(stdin)-不起作用

来自分类Dev

当scanf在c中返回0只是不起作用

来自分类Dev

(C)当终止值为[^ \ n]时scanf不起作用

来自分类Dev

c 中的 do-while 或 scanf() 不起作用

来自分类Dev

为什么我的 scanf 在函数中不起作用?

来自分类Dev

scanf() 方法在 while 循环中不起作用?

来自分类Dev

将字符串与整数进行比较,不起作用?

来自分类Dev

整数比较在if语句(vhdl)中不起作用

来自分类Dev

用整数交换一位,代码不起作用

来自分类Dev

jQuery添加跨度整数值不起作用

来自分类Dev

JSONObject getString(String.valueof(可变整数))不起作用

来自分类Dev

双精度和整数的和与乘法不起作用

来自分类Dev

字符串数字到整数不起作用PHP

来自分类Dev

Laravel迁移整数的默认值不起作用

来自分类Dev

使用Python检查整数溢出不起作用

来自分类Dev

简单的整数到十六进制转换不起作用

来自分类Dev

字符串替换为整数不起作用

来自分类Dev

带有整数的while循环不起作用

来自分类Dev

使用整数键对 scala hashmap 进行排序不起作用

来自分类Dev

输入不匹配的字符串时,scanf在while循环中不起作用

来自分类Dev

为什么这个scanf格式字符串不起作用?“%[^ \ n] \ n”