繁体   English   中英

在 C 中跳过 Scanf 语句

[英]Skipping over Scanf statement in C

我正在为刽子手编写一个客观的 c 程序。 我需要复制另一个给我的程序。 我已经完成了大部分工作,但遇到了一个问题。 它必须完全复制另一个程序,所以我进入另一个程序并在字长中输入一个字符。 它想出了“数字必须在 3 到 14(含)之间”语句,并要求我再次输入一个数字,但它开始无限循环。 当我输入一个小于 3 且大于 14 的数字(出现错误并要求另一个输入)但用一个字母无限循环时,它会起作用。 有任何想法吗??? 谢谢

while (i == 0){

            printf("\n\n > Please enter a word length: ");
                scanf("%i", &wordLength);
            printf("\n\n");
            if (number > 3 && number < 14) {
                continue;
            }
            else printf("number must be between 3 and 14 (inclusive)");
            }

您正在检查number但似乎必须检查wordLength变量,并且(如@Narkha 所指出的)使用break而不是continue退出循环。

只要i保持在值0 while (i == 0)就会循环。 我没有看到i在你的代码中的任何地方被修改,所以可能有一个错误。

编辑:Alter Mann 的回答更好。

循环继续,因为您永远不会改变i并且i = 0始终为真; continue使代码跳转到循环条件,没有结束循环。 另外,正如@AlterMann 评论的那样,您没有检查 wordLength,我建议这样做

    bool continueLoop = true;
    while (continueLoop ){
        printf("\n\n > Please enter a word length: ");
        scanf("%i", &wordLength);
        printf("\n\n");

        if (wordLength > 3 && wordLength < 14) {
            continueLoop  = false;
        }
        else {
            printf("number must be between 3 and 14 (inclusive)");
        }
    }

或者可能使用break并结束循环而不带标志

    while (true){
        printf("\n\n > Please enter a word length: ");
        scanf("%i", &wordLength);
        printf("\n\n");

        if (wordLength > 3 && wordLength < 14) {
            break;
        }
        else {
            printf("number must be between 3 and 14 (inclusive)");
        }
    }

在 scanf() 之后使用 getchar() 以避免在标准输入中留下换行符。

while (i == 0){

            printf("\n\n > Please enter a word length: ");
                scanf("%d", &wordLength);
                getchar();
            printf("\n\n");
            if (number > 3 && number < 14) {
                break;
            }
            else printf("number must be between 3 and 14 (inclusive)");
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM