getLine是一个得到一条线的函数,我试图在getLine函数之外将线组合在一起。当我尝试在循环中执行此操作时,会混淆输出。我打赌它与指针有关,但我花了很多时间试图解决它。
int num;
int matrix[370];
i=1;
j=0;
while(*(point=getLine(infile)) != -2){
n[j]=*point;
if(n[0] != n[j]){
printf("matrix dim error 1");
break;
}
while (i<=n[j]){
matrix[i+(3*j)] = *(point+(i+(3*j)));
i++;
printf("%d", matrix[i+(3*j)]);
}
printf("%d %d %d\n", matrix[1],matrix[2],matrix[3]);
j++;
}
fclose( infile );
}
int *getLine(FILE *infile){
int l=0;
int line[7];
int i=1;
int *point;
while ((l=getNum(infile)) != -1){
if(l==EOF){
line[0]=EOF;
point = &line[0];
return(point);
}
line[i]=l;
i++;
}
if(i==1){
line[0]=-2;
point = &line[0];
return(point);
}
line[0]=(i-1); //stores the length of the line in first space
printf("%d %d %d\n",line[1],line[2],line[3]);
point = &line[0];
printf("%d\n",*point);
return(point);
}
int getNum(FILE *infile) {
int c=0;
int value=0;
while ((c=fgetc(infile)) != '\n') {
if(c==EOF){
return(EOF);
}
if((c==32)||(c==13)){
if(value != 0){ //Making sure a number has been gotten
//printf("%d\n\n", value);
return(value);
}
//otherwise keep getting characters
}
else if ((c<=47)||(c>=58)){
printf("incorrect number input %d\n", c);
exit(1);
}
else {
value = (10*value) + (c - '0');
}
}
return(-1);//flags that the end of line has been hit
}
答案 0 :(得分:3)
有一个问题:
int *getLine(FILE *infile){
int line[7];
int *point;
point = &line[0];
return(point);
}
返回指向局部变量的指针。从函数返回时它变为无效。您可以在堆上分配它,或让调用者将其作为参数提供。
答案 1 :(得分:0)
而不是
while (i<=n[j]){
不是你的意思
while (i<=n[j][0]){
更多编辑:这实际上没问题,我忽略了作业中的*。
编辑:更多内容:
HTH
马里奥
顺便说一句:我强烈建议: