大佬教程收集整理的这篇文章主要介绍了我试图将 2 个和从子程序传递回 C 中的主函数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试从两个不同的子程序中取一个总和并将其传递回主函数,但是每次我这样做时,它都会得到一个零值,我不确定为什么。我试过将我的打印语句放在主函数中,只是在子程序中进行计算,但仍然无效,所以我知道我的变量没有正确返回,我的总和是一个实际数字。如何将变量 sum 正确传递回主函数?
这是我的代码:
#include<stdio.h>
int X[2000];
int Y[2000];
int main()
{
file*fPDAta1= NulL;
file*fPDAta2 = NulL;
fPDAta1=fopen("DataSet1.txt","r");
fPDAta2=fopen("DataSet2.txt","r");
if(fPDAta1==NulL || fPDAta2 == NulL)
{
printf("file Couldn't be found");
}
int i=0;
while(i<2000)
{
fscanf(fPDAta1,"%d!",&X[i]);
fscanf(fPDAta2,&Y[i]);
// printf("This is X: %d\n",X[i]);
// printf("This is Y: %d\n",Y[i]);
i++;
}
fclose(fPDAta1);
fclose(fPDAta2);
avgX(X);
avgY(Y);
float sum;
float sumY;
float @R_805_10586@lsum;
float @R_805_10586@lavg;
@R_805_10586@lsum= sum + sumY;
@R_805_10586@lavg= @R_805_10586@lsum/4000;
printf("Sum X: %f\n\n",sum);
printf("@R_805_10586@l sum: %f\n\n",@R_805_10586@lsum);
printf("The @R_805_10586@l average is: %0.3f\n\n",@R_805_10586@lavg);
return 0;
}
int avgX(int X[])
{
int i=0;
float averageX;
float sum;
sum = 0;
while (i<2000)
{
sum += X[i];
i++;
}
averageX = sum/2000;
printf("Sum of X: %f\n\n",sum);
printf("The sum of Data Set 1 is: %0.3f\n\n",averageX);
return(sum);
}
int avgY(int Y[])
{
int i=0;
float averageY;
float sumY;
sumY = 0;
while (i<2000)
{
sumY += Y[i];
i++;
}
averageY = sumY/2000;
printf("Sum of Y: %f\n\n",sumY);
printf("The sum of Data Set 2 is: %0.3f\n\n",averageY);
return (sumY);
}
首先,您似乎在期待这些台词
avgX(X);
avgY(Y);
以某种方式更新 sum
函数中的 sumY
和 @H_250_7@main 变量。这是对内存访问方式的根本误解。
具有相同标识符的局部变量声明不会在函数之间共享。它们只能在声明它们的函数内访问(并且只能在函数调用期间访问)。
在此示例中,每个函数中的 apples
变量彼此绝对没有相关性。期望此程序打印 15
是错误的。该程序具有未定义行为,因为 foo
和 bar
从未初始化的变量中读取值。
void foo(void) {
int apples;
/* This is undefined behaviour,* as apples was never initialized. Do not do this. */
apples += 5;
}
void bar(void) {
int apples;
/* This is undefined behaviour,* as apples was never initialized. Do not do this. */
printf("%d\n",apples);
}
int main(void) {
int apples = 10;
foo();
bar();
return 0;
}
取而代之的是,您需要使用函数的参数和返回值。在此示例中,在 @H_250_7@main 中,我们将 apples
的 value 作为参数传递给 foo
,5
将 int foo(int val) {
return value + 5;
}
void bar(int val) {
printf("%d\n",val);
}
int main(void) {
int apples = 10;
apples = foo(apples);
bar(apples);
return 0;
}
添加到此值,并且 返回结果。我们分配这个返回值,覆盖我们之前的值。
val
再次注意,foo
参数不引用某些“共享变量”,它们分别是 bar
和 avgX
的局部变量。
至于您的计划的细节:
avgY
和 int sum_ints(int *values,size_t length) {
int result = 0;
for (size_t i = 0; i < length; i++)
result += values[i];
return result;
}
执行完全相同的操作,只是标识符不同。最好编写一个带有附加长度参数的更通用的求和函数,这样您就不会到处对数据大小进行硬编码。
2000
然后您可以使用此函数轻松编写平均逻辑。
您确实检查了您的文件指针是否无效,这很好,但您没有停止程序或以其他方式解决问题。
假设一个文件总是准确地包含 fscanf
条目可能是幼稚的。您可以使用 2000
的返回值(即发生的转化次数)来测试您是否未能读取数据。它也用于表示错误。
尽管全局变量被清零这一事实使您免于对未填充的数据进行潜在的操作(如果文件包含少于 int main(void)
个条目),它会如果有其他选择,最好避免使用全局变量。
最好将文件的读取与自己的功能分开,这样可以针对每个文件处理故障,并且可以不受读取限制。
int main(int argc,char **argv)
或 @H_250_7@main 是 sum_ints
的正确有效签名。
综上所述,这里是您代码的大幅重构版本。请注意,当我们将 #include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 2000
int sum_ints(int *values,size_t length) {
int result = 0;
for (size_t i = 0; i < length; i++)
result += values[i];
return result;
}
size_t read_int_file(int *dest,size_t sz,const char *fName) {
FILE *file;
size_t i;
if ((file = fopen(fname,"r")) == NULL) {
fprintf(stderr,"Critical: Failed to open file: %s\n",fName);
exit(EXIT_FAILURE);
}
for (i = 0; i < sz; i++)
if (fscanf(file,"%d!",dest + i) != 1)
break;
fclose(filE);
return i;
}
int main(void) {
int data_x[DATA_SIZE] = { 0 },data_Y[DATA_SIZE] = { 0 };
size_t data_x_len = read_int_file(data_x,DATA_SIZE,"DataSet1.txt");
size_t data_y_len = read_int_file(data_y,"DataSet2.txt");
float sum_x = sum_ints(data_x,data_x_len),sum_y = sum_ints(data_y,data_y_len);
float @R_805_10586@l_sum = sum_x + sum_y;
float @R_805_10586@l_average = @R_805_10586@l_sum / (data_x_len + data_y_len);
printf("Sums: [X = %.2f] [Y = %.2f] [@R_805_10586@l = %.2f]\n"
"The @R_805_10586@l average is: %0.3f\n",sum_x,sum_y,@R_805_10586@l_sum,@R_805_10586@l_averagE);
}
的整数返回值分配给浮点变量时,会发生 implicit conversion。
import requests
from bs4 import BeautifulSoup
baseurl = 'https://www.everysize.com/'
headers = {
'User-Agent' : 'my user agent which i deleted for this'
}
r = requests.get('https://www.everysize.com/sneaker-SALE/')
soup = BeautifulSoup(r.content,'lxml')
productlist = soup.find_all('li',class_='item span3 reduced reduced--value loaded')
productlinks = []
for item in productlist:
for link in item.find_all('a',href=TruE):
print(link['href'])
以上是大佬教程为你收集整理的我试图将 2 个和从子程序传递回 C 中的主函数全部内容,希望文章能够帮你解决我试图将 2 个和从子程序传递回 C 中的主函数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。