2012-02-26 4 views
0

scanfのフリーズに問題があります。私は周りを見回しましたが、いくつかの質問は似ていますが、彼らは私の問題を解決するのに役立っていません。scanfでのフリーズCプログラムの開始

main(int argc, char **argv) { 
//FILE *stream = stdin; 
if (stdin == NULL) { 
    printf("Could not open file"); 
    return 0; 
} 
int exists = 0; 
char letter; 
char next = 'H'; 
char word[30]; 
int frequency = -1; 
int sample = -1; 
char *channels; 
channels=malloc(sizeof(7*sizeof(char))); 
int bitres = -1; 
int secondE = 0; 


while (exists == 0) { 
    scanf("%c", &letter); //this is the problem, possibly scanf 
    printf("AFTER"); 
    if (letter == EOF) { 
    // printf(letter); 
     printf("HEADER NOT DETECTED"); 
     return 0; 
    } 

私はprintfを使用して問題を特定しました。私は現在、このプログラムにコマンドプロンプトを介して別のファイルをパイプしています。私がscanfに到達すると、それはちょうどハングアップします。誰かが解決策を知っていれば、私は非常に感謝しています。

メモ:scanfの悪い習慣を使用していますか?ファイルポインタにstdinを割り当てるのと同じくらい簡単です(実際にはコメントアウトしています)が、scanfと同じように思えました。

+2

'scanf()'を使用する必要がありますか?特に初心者の方には、しばしば使いにくいです。代わりに 'fgetc()'を試しましたか?また、 'scanf()'はそのような方法で 'EOF'値を返しません(' fgetc() ')。 –

+0

どういう意味ですか?あなたは何かキーを押し続けると何も起こらないか、prntf( "AFTER")が連続して印刷しています..? –

+0

"AFTER"に決して達しません。しかし、scanfの直前にprintf文を置くと、文が印刷されます。 – TechnoloG

答えて

0

凍っているのはどういう意味ですか?私はこのコードを実行します。あなたのコードがscanfに届くと、あなたの入力を待ちます。あなたは何らかの入力をしてから、何が起こるかを見てください。

scanfは悪い習慣ではありません

channels=(char*)malloc(sizeof(7*sizeof(char))); 
int bitres = -1; 
int secondE = 0; 


while (exists == 0) 
{ 
    scanf("%c", &letter); // ok 
    printf("AFTER"); 
    printf("\n"); 
    printf("%c", letter); 
    printf("\n"); 
    if (letter == EOF) { 
    // printf(letter); 
    printf("HEADER NOT DETECTED"); } 
    return 0; 
} 

scanfはEOFも返さない。

+0

テキストが入っているファイルをパイプしています。パイプでファイルがstdinされますか?もしそうなら、scanfはstdin(私がパイプしたファイル内のテキストの最初の文字)の最初の文字を読み込んでいるはずです。 – TechnoloG

+0

パイピングとはどういう意味ですか?コマンドラインパラメータとしてファイル名を指定すると、stdinのファイルのような脅威ではありません。その単純なパラメータです。 –

+0

私はコマンドラインを使用しています。私の入力は次のようになります:filetobepipe |あなたは[http://www.cprogramming.com/tutorial/c/lesson14.html] – TechnoloG

0
while (exists == 0) 
{ 
    scanf("%c", &letter); // ok 
    printf("AFTER"); 
    printf("\n"); 
    printf("%c", letter); 
    printf("\n"); 
    if (letter == EOF) { 
    // printf(letter); 
    printf("HEADER NOT DETECTED"); } 
    return 0; 
} 

したがって、上記の本

if (letter == E0F) 

セクションを使用して、少しもリテラルです。理由だけではなく、ご希望の答えを保存し、

if(strcmp(letter, *desired char here*) == 0){ 

あなたのscanf関数は、デバッグではなく、例のみで凍結されている場合、それはクライアント側のかもしれ事実を考慮するだけで推測を作成するには、以下を使用する文字を使用しませんそれを上回るコードは、コードを読むときにはやや使い勝手が良く、後でプログラム内で他の文字や整数を扱うときにはエラーは発生しません。あなたがそれで達成したいことに依存します。

関連する問題