我正在尝试学习C而我想制作一个程序,将我输入的数字与数组中的数字进行比较。唯一的问题是它实际上并没有这样做。即使我输入一个来自该数组的数字,它也表明该数字不是来自该数组。
#include <stdio.h>
void getMark(int findMark, double crswk1[]);
void changePartMark(double crswk1[], int findMark);
int main()
{
int findMark;
double crswk1[10]={67, 77, 80, 40};
getMark(findMark, crswk1);
changePartMark(crswk1, findMark);
}
void getMark(int findMark, double crswk1[])
{
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
}
void changePartMark(double crswk1[], int findMark)
{
int i;
if(findMark == crswk1[i])
{
printf("It is equal");
}
else
{
printf("It is not equal");
}
}
答案 0 :(得分:2)
您正在阅读的号码永远不会回到findMark
功能中的main
。
void getMark(int findMark, double crswk1[])
{
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
}
此函数在本地参数findMark
中保存一个值。由于C中的所有参数都是按值传递的,因此对此局部变量的更改不会反映在调用者中,因此findMark
中的main
永远不会更改。
您需要更改此函数以获取`int
的地址void getMark(int *findMark, double crswk1[])
{
printf("Enter the mark you want to change: ");
scanf("%d", findMark);
}
然后你从main
这样调用这个函数:
getMark(&findMark, crswk1);
通过传入findMark
的地址,该函数可以写入该地址。
此外,您的changePartMark
函数不会搜索整个数组。它只查看索引i
。但即使这是一个问题,因为你从未设置i
。
您需要遍历数组以检查数组中每个元素的值。
int i;
for (i=0; i<4 i++) {
if(findMark == crswk1[i])
{
printf("It is equal");
}
else
{
printf("It is not equal");
}
}
答案 1 :(得分:1)
两个主要问题:
首先,您输入的号码永远不会被传回。当你写
void getMark(int findMark, double crswk1[]) {
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
}
然后您读入本地副本findMark
中的值,而不是调用者使用的值。 BTW:未使用crswk1
;所以我建议写
int getMark() {
int findMark = 0;
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
return findMark;
}
其次,您的void changePartMark(double crswk1[], int findMark)
缺少循环,i
未初始化。代码可能如下所示:
void changePartMark(double crswk1[], int findMark)
{
for (int i=0; i<4; i++) {
if(findMark == crswk1[i])
{
printf("It is equal");
}
else
{
printf("It is not equal");
}
}
}