arrays - 为什么即使矩阵中存在元素,我也找不到输出元素?
问题描述
Found
如果元素存在于第一行,则以下代码给出输出。当我尝试搜索剩余行中存在的元素时,输出为Not Found
. 请帮我解决这个问题。
会议
Enter size
rows:2
columns:2
1 2 3 4
Enter Target:3
1 2
3 4
Not Found
预期产出
Found
这是代码:
#include <stdio.h>
void Search(int n, int m, int matrix[][n], int target) {
int i, j;
while (i < m) {
j = 0;
while (j < n) {
if (target == matrix[i][j]) {
printf("Found");
return;
}
j++;
}
i++;
}
printf("\nNot Found");
}
void main() {
int matrix[5][5];
int rows, col, target;
printf("Enter size\nrows:");
scanf("%d", &rows);
printf("\ncolumns:");
scanf("%d", &col);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < col; j++) {
scanf("%d", &matrix[i][j]);
}
}
printf("\nEnter Target:");
scanf("%d", &target);
Search(col, rows, matrix, target);
}
解决方案
代码中存在多个问题:
索引变量
i
必须在函数0
外循环开始之前初始化Search
。for
为此使用循环而不是循环更不容易出错while
。为会话发布的输出与发布的代码不一致。显示了矩阵内容,但没有生成此输出的代码。
的原型
main
应该是int main(void)
或int main(int argc, char *argv[])
等价的。void
不是此函数的正确返回类型。传递给的矩阵
Search
大小为 5 行 5 列,但您告诉函数一个不同的大小:2 行和 2 列,作为参数传递,C99 原型告诉编译器列数n
的值为2
. 这导致了问题。您应该定义Search
为void Search(int n, int m, int matrix[][5], int target)
或定义matrix
为适当的大小。
这是修改后的版本:
#include <stdio.h>
void Search(int n, int m, int matrix[][n], int target) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (target == matrix[i][j]) {
printf("Found\n");
return;
}
}
}
printf("Not Found\n");
}
int main(void) {
int rows, cols, target;
printf("Enter size\nrows: ");
if (scanf("%d", &rows) != 1 || rows <= 0)
return 1;
printf("\ncolumns: ");
if (scanf("%d", &cols) != 1 || cols <= 0)
return 1;
int matrix[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (scanf("%d", &matrix[i][j]) != 1)
return 1;
}
}
printf("\nEnter Target:");
if (scanf("%d", &target) != 1)
return 1;
Search(cols, rows, matrix, target);
return 0;
}
推荐阅读
- flutter - Flutter Web 的“compute()”是否在它自己的线程或 web worker 上工作,或者它是如何工作的?
- sql - 从操作更新、删除、插入到存储过程 SQL 中设置值
- kubernetes - Kubernetes - Kubectl 版本命令返回错误
- ruby-on-rails - 如何使用 Nokogiri 从子字符串数组中抓取某些字符串的页面
- amazon-web-services - AWS 文档数据库中的事务
- angular - 如何加速 Angular 4 项目
- assembly - nasm 代码调用 scanf 崩溃取决于堆栈大小
- python - 使用pyinstaller打包selenium程序
- c# - C# ASP.NET MVC - 如果在 id 下缺少任何索引值,则动态添加文本框未绑定
- antd - TreeNode AntDesignPro 上的自定义工具提示