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;
}
}
在第6 7行之间插入一行:getchar(); 试试。
应该是输入坐标的代码也有问题,漏了个换行字符下来,被这里的getchar给接收了。
解决方法如前所述,除了这里要改,读取坐标那里也要改。
根据参考资料,可以得出以下结论解答问题:
在函数调用的过程中,会创建一个栈帧用来保存函数的执行环境。栈帧包括函数的局部变量、参数和函数的返回值等信息。在进入函数后,函数的形参并不是在函数内部新建的,而是在调用函数之前就已经压入栈中了。而在函数调用结束后,栈帧会被销毁,函数的局部变量也会被清空,但是寄存器的值不会被销毁。
对于问题中的两个“请输入”字样,一个是在函数调用之前,在调用函数前输出的;另一个是在函数内部的局部变量定义处输出的。具体的过程如下:
根据以上分析可以得出,输入"请输入两个整数:"是在函数调用之前输出的,而输入"请输入一个整数:"是在函数内部的局部变量定义处输出的。
所以,可以通过在调用函数前添加输出语句来去掉其中一个"请输入"字样。例如,在调用函数前添加一行代码:print("请输入两个整数:")。这样就可以让只有一个"请输入"字样。