VC疑问:程序运行结果

来源:百度知道 编辑:UC知道 时间:2024/06/22 23:56:54
1 生成指定个数的随机数值(要求在10-1000000之间),并存于文件data.txt
2 将data.txt文件中的数据依次读出,并装换为大写数值,如 123 为 一百二十三
3 将原始数值与转换结果对应存为resu.txt

我的代码为

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define M 100
#define N 10

long k[N]; FILE * fp1;

save() /*将随机数字存于文件data5.txt中*/
{FILE * fp;
int i;
if((fp=fopen("data5.txt","w"))==NULL)
{printf("can not open this file\n");
return;
}
for(i=0;i<N;i++)
fprintf(fp,"%ld\n",k[i]);
fclose(fp);
}

load() /*读取文件data5.txt中的数据*/
{FILE * fp;
int i;
if((fp=fopen("data5.txt","r"))==NULL)
{printf("can not open this file\n");
return;
}
for(i=0;i<N;i++)

你犯了个初学者经典的错误,就是错误地认为函数参数是指针就是指针传递了.
错误发生在input函数,
int input(int *po,int *p,int j)
{ int loop=0,pp;
po=&k[j];
pp=*po;
while(pp>=1)
{*p=pp%10;
p++;
pp=pp/10;
loop++; }
return loop;
}
你这里的po对应的实参是main里面的&number,错误就在这里,你想做的事是让number=k[j], 但你写的却是po=&k[j]; 请注意,这里的po需要是个指针变量,但它仍然是值传递,即input函数里的形参po,实际上只是一个值为number地址的副本,你对它的修改,又怎么会影响到number的值呢?

正确的做法是将po改为int &,即引用传递,程序其他地方也要做相应修改:

int input(int &po,int *p,int j)
{ int loop=0,pp;
po=k[j];
pp=po;
while(pp>=1)
{*p=pp%10;
p++;
pp=pp/10;
loop++; }
return loop;
}

main里面
for(i=0;i<N;i++) /*小写转大写*/
{ver=input(number,array,i); //改成number