可能我粗心了,但我实在找不到了…


char num;
    while (1)
    {
        loop:
        printf("请输入数值:");
        num = getchar();
        if (num  == ' ')
        {
            if (arr[row - 1][col - 1] != ' ')
                *count++;
            arr[row - 1][col - 1] = num;
            break;
        }
        else if (check_number(ele, num) == 1)
        {
            for (int i = 0; i < ROW; i++)
            {
                if (arr[i][col - 1] == num)
                {
                    printf("此列已有%c!请重新输入!\n", num);
                    goto loop;
                }
            }
            for (int j = 0; j < COL; j++)
            {
                if (arr[row - 1][j] == num)
                {
                    printf("此行已有%c!请重新输入!\n", num);
                    goto loop;
                }
            }
            if(arr[row-1][col-1]==' ')
                *count--;
            arr[row - 1][col - 1] = num;
            break;
        }
        
    }

img


为啥有两个“请输入”?第一个哪来的?

在第6 7行之间插入一行:getchar(); 试试。

应该是输入坐标的代码也有问题,漏了个换行字符下来,被这里的getchar给接收了。
解决方法如前所述,除了这里要改,读取坐标那里也要改。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7466359
  • 这篇博客也不错, 你可以看下如何打印空心菱形???(for循环典型例题
  • 除此之外, 这篇博客: 算法开启循环队列武魂中的 实际上这题我报错我不想找了太恶心了(家凌帮我找错的非常感谢) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • img

  • 您还可以看一下 郑光华老师的性能测试核心知识解惑课程中的 如何定义性能测试?小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料,可以得出以下结论解答问题:

    在函数调用的过程中,会创建一个栈帧用来保存函数的执行环境。栈帧包括函数的局部变量、参数和函数的返回值等信息。在进入函数后,函数的形参并不是在函数内部新建的,而是在调用函数之前就已经压入栈中了。而在函数调用结束后,栈帧会被销毁,函数的局部变量也会被清空,但是寄存器的值不会被销毁。

    对于问题中的两个“请输入”字样,一个是在函数调用之前,在调用函数前输出的;另一个是在函数内部的局部变量定义处输出的。具体的过程如下:

    1. 在调用Add函数之前,先要输入两个参数a和b,这个输入会在调用函数前输出"请输入两个整数:"。
    2. 调用Add函数时,会创建一个新的栈帧,并将参数a和b压入栈中。
    3. 在Add函数内部,定义一个局部变量z,并输出"请输入一个整数:"。
    4. 输入z的值后,会将z的值保存在寄存器eax中,并将寄存器eax的值压入栈中。
    5. 然后将参数a和b的值分别保存在寄存器ecx和eax中,并将寄存器ecx和eax的值压入栈中。
    6. 执行相加操作,并将结果保存在寄存器eax中。
    7. 返回结果时,将寄存器eax的值返回给调用函数,并将寄存器ebx、esi、edi等压栈的值退栈。
    8. 将寄存器ebp的值赋给寄存器esp,这样栈帧的空间就会被还给内存。
    9. 将栈中保存的以前的ebp的值赋给寄存器ebp,这样esp和ebp就又开始维护调用函数的栈帧。
    10. 最后,执行ret指令,返回到调用函数的下一条指令处。

    根据以上分析可以得出,输入"请输入两个整数:"是在函数调用之前输出的,而输入"请输入一个整数:"是在函数内部的局部变量定义处输出的。

    所以,可以通过在调用函数前添加输出语句来去掉其中一个"请输入"字样。例如,在调用函数前添加一行代码:print("请输入两个整数:")。这样就可以让只有一个"请输入"字样。