弄清楚C中while / if循环的逻辑

亚姆特斯拉

我有一些代码,而我遇到麻烦的函数是这样的:

unsigned int getInputData() {

    printf("Please input a positive integer number terminated with a carriage return.\n");

    do{ 
        scanf("%c", &input);

        if(isdigit(input))  {
            temp = charToInt(input);
            rValue = mergeInt(rValue, temp);
        }
        if(rValue >= imax)  {
            rValue = 0;
            printf("ERROR: That is too large of an integer. Please try again. \n");
        }
        else if(isalpha(input)){
            rValue = 0;
            printf("This is not a integer. Please try again. \n");
        }
        else{
            printf("OK. This is a good number. \n");
        }
    } while(1);
}

我正在char逐个扫描,将其合并为一个int正是我要执行的操作,但是我只希望"OK. This is a good number."用户输入时将其打印一次。示例:如果有人输入:12345我希望它返回:"OK. This is a good number."这5个字符一次,而不是每个字符一次。希望这很有意义,花了一段时间,所以任何事情都会有所帮助。

mo

您的代码背后存在巨大的逻辑问题:

  • 您无限循环而无需检查输入结束:

您说要在用户输入多个数字时告诉您这是否是一个好数字,但是您一次只能读取一个字符,而没有定义数字的结尾。尽管您确实指定以回车符结尾,但是您并未以这种方式设计算法,因此您从不检查\n字符。

  • 您为getInputData()函数定义了一个返回值,但您从未从该函数返回。
  • 您测试是否input是数字来更新值,但是对于错误,只有在它是字母字符的情况下,您才会显示错误。

基本上,为了保持编写算法的方式,这是另一种方法:

unsigned int getInputData() {
    char input;
    long value=0;

    do {
        scanf("%c", &input);

        if (isdigit(input))
            value = value*10+input+'0';
        else if (input == '\n')
            return 1;
        else
            return 0;

    } while(1);
}

int main() {
    printf("Please input a positive integer number terminated with a carriage return.\n");

    if (getInputData() == 1)
        printf("OK. This is a good number.\n");
    else
        printf("This is not a integer. Please try again. \n");

    return 0;
}

但我确实从无限循环中退出,以便能够检查结果。

注意:出于示例的目的,我没有检查溢出。NB1:我一直在使用,scanf()以保持接近您的代码,但是如果您只想一次读取一个字符,则最好使用getchar()更简单,更快的方法。NB2:您还可以通过使用以下更多功能来简化代码scanf()

unsigned int getInputData() {
    unsigned input;
    long value=0;
    int n;

    do {
        n = scanf("%u", &input);
        if (n == 0)
            return 0;
        else
            return 1;
    } while(1);
}

您甚至可以尝试使用scanf("%a[0-9]")GNU扩展。请参阅man scanf以获取更多详细信息。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法弄清楚这里的逻辑?

来自分类Dev

PL / SQL简单逻辑错误,无法弄清楚

来自分类Dev

无法弄清楚解决这个挑战的逻辑

来自分类Dev

无法弄清楚如何循环玩家的回合和移动Tic Tac Toe(C ++)

来自分类Dev

缺少While循环逻辑

来自分类Dev

while循环javascript逻辑

来自分类Dev

循环逻辑中的循环孔

来自分类Dev

Python,无法弄清楚如何保存循环变量

来自分类Dev

我如何弄清楚这个数组/循环

来自分类Dev

Python,无法弄清楚如何保存循环变量

来自分类Dev

Numpy Savetxt覆盖,无法弄清楚放置循环的位置

来自分类Dev

无法弄清楚为什么for循环不会运行

来自分类Dev

试图弄清楚如何正确打破这些嵌套循环

来自分类Dev

弄清楚C ++中的值语义

来自分类Dev

试图弄清楚如何使用python中的循环获取下一个值

来自分类Dev

嵌套循环逻辑中的if语句

来自分类Dev

C ++:基于覆盖循环的逻辑

来自分类Dev

无法弄清楚如何解决返回二进制树中目标值的两个值的逻辑缺陷

来自分类Dev

我正在尝试使用module.exports将我的逻辑放在单独的文件中并要求,但是,我似乎无法弄清楚

来自分类Dev

应该是简单的jQuery循环,但似乎无法弄清楚如何循环执行此操作

来自分类Dev

Visual C#中的逻辑循环

来自分类Dev

MDN的reduce()pollyfill的while循环背后的逻辑

来自分类Dev

无法理解while循环的逻辑

来自分类Dev

MDN的reduce()pollyfill的while循环背后的逻辑

来自分类Dev

While循环和逻辑运算

来自分类Dev

无法弄清楚如何使用getchar(); 在C中

来自分类Dev

有人可以帮忙弄清楚如何循环这段代码吗?

来自分类Dev

无法弄清楚我的for循环中有什么语法错误

来自分类Dev

无法弄清楚for循环的问题,array_filter也可能很有趣

Related 相关文章

  1. 1

    无法弄清楚这里的逻辑?

  2. 2

    PL / SQL简单逻辑错误,无法弄清楚

  3. 3

    无法弄清楚解决这个挑战的逻辑

  4. 4

    无法弄清楚如何循环玩家的回合和移动Tic Tac Toe(C ++)

  5. 5

    缺少While循环逻辑

  6. 6

    while循环javascript逻辑

  7. 7

    循环逻辑中的循环孔

  8. 8

    Python,无法弄清楚如何保存循环变量

  9. 9

    我如何弄清楚这个数组/循环

  10. 10

    Python,无法弄清楚如何保存循环变量

  11. 11

    Numpy Savetxt覆盖,无法弄清楚放置循环的位置

  12. 12

    无法弄清楚为什么for循环不会运行

  13. 13

    试图弄清楚如何正确打破这些嵌套循环

  14. 14

    弄清楚C ++中的值语义

  15. 15

    试图弄清楚如何使用python中的循环获取下一个值

  16. 16

    嵌套循环逻辑中的if语句

  17. 17

    C ++:基于覆盖循环的逻辑

  18. 18

    无法弄清楚如何解决返回二进制树中目标值的两个值的逻辑缺陷

  19. 19

    我正在尝试使用module.exports将我的逻辑放在单独的文件中并要求,但是,我似乎无法弄清楚

  20. 20

    应该是简单的jQuery循环,但似乎无法弄清楚如何循环执行此操作

  21. 21

    Visual C#中的逻辑循环

  22. 22

    MDN的reduce()pollyfill的while循环背后的逻辑

  23. 23

    无法理解while循环的逻辑

  24. 24

    MDN的reduce()pollyfill的while循环背后的逻辑

  25. 25

    While循环和逻辑运算

  26. 26

    无法弄清楚如何使用getchar(); 在C中

  27. 27

    有人可以帮忙弄清楚如何循环这段代码吗?

  28. 28

    无法弄清楚我的for循环中有什么语法错误

  29. 29

    无法弄清楚for循环的问题,array_filter也可能很有趣

热门标签

归档