1

ユーザーにテキスト ファイルの名前を入力してもらい、そのテキスト ファイルを開いて最初の行を読み取らせようとしています。次に、割り当てられたスペースに残りの行を格納したいと思います。私は MacBook を使用しており、プログラム Xcode を使用しています。私はCでプログラムをやっています。

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


int main()
{
int MMSize, CacheSize, CBLineSize, SetAsso, NumOfLines, *Num;
char    RepPol, FileNam[75];
FILE    *ptr_file;

printf("Enter the name of the input file containing the list of memory references generated by the CPU: "); 

scanf( "%s", FileNam );
fpurge( stdin );

ptr_file = fopen(FileNam, "r");

 while (ptr_file==NULL){
    printf("failed to open file.\nPlease enter a valid file name: ");

    scanf( "%s", FileNam );
    fpurge( stdin );

    ptr_file = fopen( FileNam , "r" );
}   

fscanf(ptr_file, "%d", &NumOfLines);

Num = malloc(sizeof(int) * NumOfLines); 

for (int i=0; i<NumOfLines; i++) {
    fscanf(ptr_file, "%*[^0123456789]%d", &Num[i]);
            printf("%d\n", Num[i]);
}

    free(Num);
fclose(ptr_file);

return 0;
}

私のコードは正常に動作しますが、常に入力ファイルが NULL であると表示されます。入力ファイルをプロジェクトのソース フォルダーに file1.txt として保存しました。file1.txt という名前とファイルの場所全体を入力しようとしましたが、ファイルが NULL であると表示されるため、ループが継続的に実行されます。ただし、ファインダーでファイルに移動すると、テキストが含まれています。誰でもこれで私を助けてくれませんか。

これはうまくいきます。すべての助けに感謝します。

4

1 に答える 1

0

これはおそらくあなたが望むものに近いです。

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


int main(void)
{
  int  NumOfLines, *Num;
  char FileNam[75];
  FILE *ptr_file = NULL;

  printf("Enter the name of the input file containing the list of memory references generated by the CPU: "); 

  scanf( "%s", FileNam );
  fpurge( stdin );

  ptr_file = fopen(FileNam, "r");

  while(ptr_file == NULL) {
    printf("failed to open file.\nPlease enter a valid file name: ");

    scanf( "%s", FileNam );
    fpurge( stdin );

    ptr_file = fopen( FileNam, "r" );
  }   

  fscanf(ptr_file, "%d", &NumOfLines);

  Num = malloc(sizeof(int) * NumOfLines); 

  for (int i=0; i<NumOfLines; i++) {
    fscanf(ptr_file, "%d", &Num[i]);
    printf("%d\n", Num[i]);
  }

  free(Num);
  fclose(ptr_file);
  return 0;
}

これは、次の形式の入力ファイルを受け取ります。

2
123
456

あなたのコードから、そのフォーマットがどうあるべきかを推測しています。今起こっていることは、最初の数字があと何行あるかを表しているということです(それ自体を除く)。次に、プログラムはその行数を読み取ろうとします。

あなたが犯した間違いのいくつか:

  • fopen同じ名前の変数の代わりに文字列リテラルで呼び出す
  • a を使用するつもりだったdo/whileときに a を使用するwhile
  • Num配列を割り当てたときにポインターを正しく処理していない
于 2012-04-10T17:58:27.093 に答える