2016-04-26 20 views
0

私は、ユーザーが複数のデータファイルを保持するフォルダへの完全なパスを入力するプログラムを持っています。たとえば ためCのユーザー定義の後にプログラム内にファイル名を追加する方法

したがって、ユーザーが入力したと言う:

\\psf\Home\Desktop\HealthScore\HealthScore\DataFiles 

私はプログラム内でそれを変更する必要があります:私は1つのポインタと一緒に文字列を追加しようとしました

\\psf\Home\Desktop\HealthScore\HealthScore\DataFiles\BT_1.txt 

、もう一方は配列であり、両方の部分がポインタです。あなたは文字列を連結するstrcat()を利用することができます

char filepath[1000]; 
FILE* fp; 
char BP1_ext [] = "\\BP1.txt"; 

printf("Enter the path to the file holding the data files:"); 

      fflush(stdin); 
      scanf("%s", filepath); 
      //////////////////////BLOOD PRESSURE////////////////////// 
      if (bpSensors == 1) 
      { 
       filepath = (filepath + BP1_ext); 
       fp = fopen(filepath, "r"); 
       if (fp == NULL) 

       { 
        puts("ERROR OPENING FILES"); 
        exit(EXIT_FAILURE); 
       } 

       else 
       { 
        while (!feof(fp)) 
        { 
         printf("\n\nREADING BP_1.txt..."); 
         fgets(bp1_Line, 100, fp); 
         sscanf(bp1_Line, "%s\t%s\t%s", bp1_Val1, bp1_Val2, bp1_Val3); 
         printf("%s\t%s\t%s\n", bp1_Val1, bp1_Val2, bp1_Val3); 
        } 
        fclose(fp); 

       } 

      } 

答えて

2

:ここ

は私の最新の試みのサンプルです。使用例は

となります。filepathには、連結された文字列を格納するのに十分な空きがあります。

  1. fflush(stdin)はそれを使用していない、undefined behaviorである、と述べました。
  2. 問題はここにあるWhy is “while (!feof (file))” always wrong?
+0

実際の点2に、OPはできます'while(fgets(bp1_Line、100、fp)!= NULL){...}'のようにループを作成し、 'printf'キューをループの外側に移動させてください。 –

+0

25種類の条件があるのですべてを統合しました。それらに応じてさまざまなファイルをテストして開く必要があるため、数百行のコードを読む必要がない、 。しかし、私は提案されたwhileループを試してみるだろうが、私は簡単にするためにループにprintfを残そうと思っている。 –

0

を参照してください。

filepath = (filepath + BP1_ext); 

使用strcatstring.hから、あなたの文字列(strcat(destionation, source))を連結する:

strcat(filepath, BP1_ext); 
+0

大丈夫です。私はそれをしました。しかし、私はまだfp = fopen(filepath、 "r")を使用しますか?私はファイルパスを複数回変更することができますか?たとえば、strcat(filepath、BP1_ext)などです。 strcat(ファイルパス、BP2_ext);お互いに影響を与えずに同時に使用することができますか? –

関連する問題