0

コンパイルはしていませんが、位置と速度のリストを読み込む単純なプログラムがあります。ユーザーに位置と速度ファイルの名前を尋ねてから、配列を main() に出力したいだけです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define loop(idx,last) for (idx = 0; idx < last ; idx++)

float readinput (char *posfile, char *velfile);


int main (void)
{
char posfile[100],velfile[100];
float pos[10000][3], vel[10000][3];
printf( "What is the name of your positions file (x y z): " );
scanf( "%s", &posfile );
printf( "What is the name of your velocity file (vx vy vz): " );
scanf( "%s", &velfile );
pos = readinput(posfile,velfile);
return 0;
}

float readinput (char *posfile, char *velfile)
{
float pos[10000][3], vel[10000][3];
float x,y,z;
float vx,vy,vz;
int i;
char line[256];

FILE *files;

files = fopen(posfile, "r");
loop(i,10000){
                  fscanf(files, "\n%f %f %f\t", &x, &y, &z);
                  pos[i][0] = x;
                  pos[i][1] = y;
                  pos[i][2] = z;
                  printf("\n%f %f %f\t",x,y,z);
              }
fclose(files);

files = fopen(velfile, "r");
loop(i,10000){
                 fscanf(files, "\n%f %f %f\t", &vx, &vy, &vz);
                 vel[i][0] = vx;
                 vel[i][1] = vy;
                 vel[i][2] = vz;
                 printf("\n%f %f %f\t",vx,vy,vz);
             }
fclose(files);
return pos;    
}

申し訳ありませんが、これは私の最初のプログラムです。

  main.c: In function 'main':
main.c:18:5: error: incompatible types when assigning to type 'float[10000][3]' from type 'float'
 pos = readinput(posfile,velfile);
     ^
main.c: In function 'readinput':
main.c:51:1: error: incompatible types when returning type 'float (*)[3]' but 'float' was expected
 return pos;
4

6 に答える 6

0

報告された問題は、次のことを試みていることです。

 pos = readinput(posfile,velfile);

 return pos;

配列を float として返すことはできず、float を配列に代入することもできません。

scanfs のポインターに関するその他の問題を除き、

float readinput (char *posfile, char *velfile)
{
float pos[10000][3], vel[10000][3];
...

void readinput (char *posfile, char *velfile, float pos[][3], float vel[][3])
{    
...

ローカル変数を削除します....

于 2013-05-08T18:11:36.307 に答える
0

C の文字列は の配列ですchar。引数を to または に変更する必要readinputcharありchar *ますchar[]

int readinput(char * posfile, char * velfile)

ヒント: 次回は、コンパイルされない理由を教えてください。

于 2013-05-08T17:38:31.133 に答える
0

どこから始めればよいかさえわかりません... 良いCの本に投資したいと思うかもしれません。

あなたのmain()機能では:

char posfile,velfile;
printf( "What is the name of your positions file (x y z): " );
scanf( "%s", &posfile );

char は 'a' のような単一の文字です。文字列を作成する場合は、動的または静的に割り当てられた文字の配列が必要です。

char posfile[100]; 

例えば。

あなたのreadinput()機能では:


(文字列)charを渡したいときに s (単一文字)を渡していますchar *

char posfile, char velfile

関数は型を返しますが、int型を返そうとしていfloatます:

int readinput(char posfile, char velfile)
float pos[10000][3], vel[10000][3];

returnステートメント内の関数から複数の値を返すことはできません。

return pos,vel;    

関数からローカル データをメインに返そうとしています。

float pos[10000][3], vel[10000][3];
...
return pos,vel;    

それはあなたにUBを与えるでしょう、あなたはそれらをグローバルにするか、あなたのメインでそれらを定義してそれらを渡す必要があります。

于 2013-05-08T17:38:50.430 に答える
0

すべきではない

int readinput (char posfile, char velfile)

なれ

int readinput (char *posfile, char *velfile)

文字だけでなく、文字列が必要だと思いますか?

于 2013-05-08T17:39:00.810 に答える