鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: Gordon1

[已解决]矩阵小程序

[复制链接]
 楼主| 发表于 2024-2-12 21:55:16 | 显示全部楼层
FishC 发表于 2024-2-12 21:45
当然可以,下面是使用程序格式的修复后的代码:

为什么没有指令3和4的代码,而且指令2的代码是指令3的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-12 21:55:55 | 显示全部楼层    本楼为最佳答案   
Gordon1 发表于 2024-02-12 21:55
为什么没有指令3和4的代码,而且指令2的代码是指令3的


非常抱歉,我之前的回答有误。是的,指令2的代码应该是指令3的。让我们来修复这个问题并添加指令3和指令4的代码。

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main() {
  4.     int count1 = 0, count2 = 0;
  5.     int M, N;
  6.     int *matrix = NULL;
  7.     int instruction;

  8.     printf("=============================\n");
  9.     printf("* 欢迎使用该程序,指令如下:*\n");
  10.     printf("* 1. 生成一个 M*N 的矩阵     *\n");
  11.     printf("* 2. 初始化矩阵              *\n");
  12.     printf("* 3. 给矩阵中某个元素赋值    *\n");
  13.     printf("* 4. 读取矩阵中某个元素      *\n");
  14.     printf("* 5. 打印整个矩阵            *\n");
  15.     printf("* 6. 结束程序                *\n");
  16.     printf("=============================\n\n");

  17.     do {
  18.         printf("请输入指令:");
  19.         scanf("%d", &instruction);
  20.         count1++;

  21.         if (instruction == 1) { // 指令1 - 生成矩阵
  22.             count2++;
  23.             if (count2 > 1) {
  24.                 printf("矩阵已存在,是否需要重新创建(Y/N)->");
  25.                 char choice;
  26.                 scanf(" %c", &choice);

  27.                 if (choice == 'Y' || choice == 'y') {
  28.                     free(matrix);
  29.                     count2 = 0;
  30.                 } else {
  31.                     continue;
  32.                 }
  33.             }

  34.             printf("请输入矩阵的行数和列数(M N):");
  35.             scanf("%d%d", &M, &N);
  36.             matrix = (int *)malloc(M * N * sizeof(int));

  37.             printf("成功生成 %d*%d 的矩阵!\n\n", M, N);
  38.         } else if (instruction == 2) { // 指令2 - 初始化矩阵
  39.             if (count2 == 0) {
  40.                 printf("矩阵未创建,请先生成一个矩阵!\n\n");
  41.                 continue;
  42.             }

  43.             int value;
  44.             printf("请输入要用来初始化矩阵的值:");
  45.             scanf("%d", &value);

  46.             for (int i = 0; i < M * N; i++) {
  47.                 matrix[i] = value;
  48.             }

  49.             printf("矩阵初始化成功!\n\n");
  50.         } else if (instruction == 3) { // 指令3 - 给矩阵中某个元素赋值
  51.             if (count2 == 0) {
  52.                 printf("矩阵未创建,请先生成一个矩阵!\n\n");
  53.                 continue;
  54.             }

  55.             int row, col, value;
  56.             printf("请输入要赋值的元素的行和列索引(行 列):");
  57.             scanf("%d%d", &row, &col);

  58.             if (row < 0 || row >= M || col < 0 || col >= N) {
  59.                 printf("输入的行和列索引超出矩阵范围,请重新输入!\n\n");
  60.                 continue;
  61.             }

  62.             printf("请输入要赋的值:");
  63.             scanf("%d", &value);

  64.             matrix[row * N + col] = value;
  65.             printf("成功将矩阵中第 %d 行第 %d 列的元素赋值为 %d!\n\n", row, col, value);
  66.         } else if (instruction == 4) { // 指令4 - 读取矩阵中某个元素
  67.             if (count2 == 0) {
  68.                 printf("矩阵未创建,请先生成一个矩阵!\n\n");
  69.                 continue;
  70.             }

  71.             int row, col;
  72.             printf("请输入要读取的元素的行和列索引(行 列):");
  73.             scanf("%d%d", &row, &col);

  74.             if (row < 0 || row >= M || col < 0 || col >= N) {
  75.                 printf("输入的行和列索引超出矩阵范围,请重新输入!\n\n");
  76.                 continue;
  77.             }

  78.             int value = matrix[row * N + col];
  79.             printf("矩阵中第 %d 行第 %d 列的元素的值为:%d\n\n", row, col, value);
  80.         } else if (instruction == 5) { // 指令5 - 打印整个矩阵
  81.             if (count2 == 0) {
  82.                 printf("矩阵未创建,请先生成一个矩阵!\n\n");
  83.                 continue;
  84.             }

  85.             for (int i = 0; i < M; i++) {
  86.                 for (int j = 0; j < N; j++) {
  87.                     printf("%d ", matrix[i * N + j]);
  88.                 }
  89.                 printf("\n");
  90.             }

  91.             printf("\n");
  92.         } else if (instruction == 6) { // 指令6 - 结束程序
  93.             free(matrix);
  94.             printf("程序已结束,欢迎下次使用!\n");
  95.             break;
  96.         } else {
  97.             printf("输入的指令无效,请重新输入!\n\n");
  98.         }
  99.     } while (1);

  100.     return 0;
  101. }
复制代码


这个修复后的代码中,我们添加了指令3和指令4的代码,可以分别用来给矩阵中某个元素赋值和读取矩阵中某个元素的值。希望这次的代码更符合您的期望,如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-12 22:01:20 | 显示全部楼层
FishC 发表于 2024-2-12 21:55
非常抱歉,我之前的回答有误。是的,指令2的代码应该是指令3的。让我们来修复这个问题并添加指令3和指 ...

能告诉我为什么我之前的程序会自己结束吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-12 22:01:32 | 显示全部楼层
Gordon1 发表于 2024-02-12 22:01
能告诉我为什么我之前的程序会自己结束吗


在您之前的程序中,没有正确处理结束程序的指令。在指令6中,您没有使用`break;`来跳出循环,因此程序会继续执行下去,导致无法正确退出。这是导致程序自动结束的原因。

修复这个问题非常简单,只需在指令6的分支中添加`break;`语句即可。这样程序就能正确退出循环并结束了。以下是修复后的代码片段:

  1. else if (instruction == 6) { // 指令6 - 结束程序
  2.     free(matrix);
  3.     printf("程序已结束,欢迎下次使用!\n");
  4.     break; // 添加break来跳出循环
  5. }
复制代码


希望这次的解释能够帮助您理解问题所在。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-12 22:02:55 | 显示全部楼层
FishC 发表于 2024-2-12 22:01
在您之前的程序中,没有正确处理结束程序的指令。在指令6中,您没有使用`break;`来跳出循环,因此程序 ...

我的意思是为什么之前输入完3或4或5之后不会继续让我输入指令,而是结束程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-12 22:03:10 | 显示全部楼层
Gordon1 发表于 2024-02-12 22:02
我的意思是为什么之前输入完3或4或5之后不会继续让我 ...


非常抱歉,我误解了您的问题。在您的程序中,确实存在一个问题导致输入完3、4或5后程序会结束。问题出现在循环的外层,当用户输入指令为3、4或5时,您没有将程序回到循环的开头,而是直接跳到了程序的结束部分。这就导致了程序无法再次进入到用户输入指令的阶段。

要解决这个问题,您需要将用户输入指令的部分放入一个内层循环中,然后使用 `break` 语句跳出内层循环,继续让用户输入指令。

下面是修复后的代码片段示例:

  1. do {
  2.     printf("请输入指令:");
  3.     scanf("%d", &yonghu);

  4.     // ... 其他指令处理逻辑

  5.     if (yonghu == 6) { // 指令6 - 结束程序
  6.         free(array);
  7.         printf("程序已结束,欢迎下次使用!\n");
  8.         break;
  9.     }
  10. } while (1);
复制代码


在这个修复后的代码中,我们使用了一个 `do-while` 循环来持续地等待用户输入指令。当用户输入指令为6时,我们释放内存、打印结束信息并使用 `break` 跳出整个循环,结束程序。

希望这次能够解决您的问题。如果还有其他疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-6 21:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表