我正在尝试学习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");
}
}
您正在阅读的数字永远不会回到main
函数中的findMark
。
void getMark(int findMark, double crswk1[])
{
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
}
此功能在本地参数findMark
中保存一个值。因为C中的所有参数均按值传递,因此对呼叫者的更改不会反映出该局部变量,因此findMark
中的CC_4永远不会更改。
您需要更改此功能才能采用``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");
}
}
两个主要问题:
首先,您输入的数字永远不会传递。当你写
时void getMark(int findMark, double crswk1[]) {
printf("Enter the mark you want to change: ");
scanf("%d", &findMark);
}
然后,您在本地副本findMark
中读取该值,而不是呼叫者使用的值。顺便说一句:不使用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");
}
}
}