2017-12-23 9 views
-3

以下のコードは、ファイル操作がのです。LinuxコンパイラでCコードが機能しない

最初のプログラムはファイルに読み込み、そのプログラムがどの質問をファイルから欲しいかをユーザーに尋ねた後に配列に格納します。ユーザーが入力すると、 "2"プログラムはファイルから2番目の質問を受け取り(ファイル内の2〜3の数字の間にあるすべての文字を取ります)、画面に印刷します。

私はこのコードをWindowsのDEV C++コンパイラに記述しました。これはDev C++で動作しています。

しかしLinux端末でこのコードを試してみると、コードはユーザーに整数を要求しますが、ファイルからの結果を画面に表示しません。エラーは発生せず、プログラムは終了します

FILE* file = fopen("txt", "r"); 
char line[256]; 
char a[10][14]; 
char getIndex[2]; 
char firstIndex[2]; 
char secondIndex[2]; 
int firstIndexNum; 
int secondIndexNum; 

printf("Please enter number:"); 
fgets (getIndex, 100, stdin); 
strcpy(firstIndex,getIndex); 

firstIndexNum = atoi(firstIndex); 

secondIndexNum = firstIndexNum + 1; 

sprintf(secondIndex, "%d", secondIndexNum); 


int i = 0; 
while (fgets(line, sizeof(line), file)) { 
    strcpy(a[i],line); 
    i++; 
} 
int sizeArray = sizeof(a)/sizeof(a[0]); 
for(int i=1;i<=sizeArray;i++){ 
    if(strstr(a[i-1], firstIndex) != NULL){ 
     while(strstr(a[i], secondIndex) == NULL){ 
      printf("%s",a[i]); 
      i++; 
     } 
    } 

} 
fclose(file); 
return 0; 

}

任意の提案ですか?

+0

Linuxでのプログラムの流れは? –

答えて

1

ファイル「poems.txt」をCR/LF行末でUnix行末に変換する必要があります。これは 'tr'コマンドで行うことができます。

tr -d '\r' <input.file> output.file 
+0

これは私の問題を解決しました!ありがとうございました。 :)))))) – user9134929

+2

@ user9134929:これはあなたの問題を解決するのに十分であったことは注目に値する。しかし、[user3121023](https://stackoverflow.com/users/3121023/user3121023)のコメントで確認された問題は、コードが非常に脆弱であることを意味します。ほとんどの場合、それらの問題を修正しなければ、あまりにも。 –

+1

問題はありませんが、変換で問題が解決された理由を理解できますか? – svujic

関連する問題