首页 > 解决方案 > 我做的,while循环没有按我的意思工作:((C语言)

问题描述

大家好,我即将完成一些 c 基础课程,并以一个完整的计算器项目结束。

在数组部分,我的以下 do while 循环不断循环,无法打破条件。

我尝试添加exit(); 也更改return(0)return(EOF)但没有任何反应。

这是代码:

#include <stdio.h>

int main()
{
    int row_num,colm_num;
    do
    {
        printf("PLEASE! choose Array 'A' Rank (maximum 4x4)==>\n\n");
        printf("  'A' rows=  ");
        scanf("%i", &row_num);

            

       printf("  'A' columns=  ");
        scanf("%i", &colm_num);
        
        printf("Array 'A' set to rank = %ix%i i.e. (A[%i][%i]) \n\n)",row_num,colm_num,row_num,colm_num);
       
    }
    while(( scanf("%i", &row_num)==1 || row_num<=4||row_num>=0)||( scanf("%i", &colm_num)==1 || row_num<=4||row_num>=0)); //restriction for user input 

       
return(0);}

我不得不提到这不是完整的代码,但我在单独的文件中运行它以单独调试每个部分,顺便说一句,如果有比启动另一个 c 文件更好的方法来调试代码部分告诉我“我正在使用 codelite 编辑器 IDE”谢谢所有这些都对任何初学者开放\高效的 c 编码建议我将不胜感激^^。

标签: cloopsdebugging

解决方案


您的scanf条件 ( scanf("%i", &row_num)==1) 并没有达到您期望的效果。从 scanf 手册页:

返回值
这些函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。

你有一个输入项被匹配,所以scanf只要输入是数字就总是返回 1,你永远不能退出循环,因为条件仍然为真。

在循环体结束之前调用scanf读取row_num和(检查返回值以向用户发出错误信号),然后直接检查条件中这两个变量的值。col_num

或者,您可以&&改为验证scanf确实读取了一个值,并在相同条件下检查该值,但这可能会造成过于混乱且难以读取的条件。

如果有比启动另一个c文件更好的方法来调试代码部分,我会在单独的文件中运行它以单独调试每个部分

最好的选择是创建单独的函数,您可以在测试时单独调用和main测试。一旦你的代码成熟了,你就可以把所有的功能放在一起,并继续使用调试器等工具进行测试和调试。


推荐阅读