2016-04-12 12 views
0

したがって、私はcでスタックを実装しようとしています。私はすべての関数を書きましたが、私はfgetc関数に問題があります。だからここに私のコードの一部です:cの別の行に入力文字を入力する

while (1) { 
    printf("Choose an option: \ 
      \n 1 Push \ 
      \n 2 Pop \ 
      \n 3 Top \ 
      \n 4 Print \ 
      \n 5 Exit\n"); 

    option = fgetc(stdin); 
    opt = ctoi(option); 

    while (opt < 1 || opt > 5) { 
     printf("Wrong entry, let's try again: \n"); 

     option = fgetc(stdin); 
     opt = ctoi(option); 
    } 

    switch (opt) { 
    case 1: push(&stack, fgetc(stdin)); break; 
    case 2: pop(&stack); break; 
    case 3: top(&stack); break; 
    case 4: print_stack(&stack); break; 
    case 5: return 0; break; 
    default: printf("impossible"); break; 
    } 

} 

ctoiはcharをintに変換するために書いた関数です。問題は、私はexmpleのために、入力した場合は、次のとおりです。

1 

とプレス入力し、自動的に前方「は、入力のために私に尋ねてきます関数の最初の呼び出しが、(プッシュ関数呼び出しの内側)は、第2の1 \ n 'を引数とし、oは' \ n 'を無視して入力を求めます。これは可能ですか?ありがとう!

+2

2回目の呼び出しは、別の関数の引数であるので、だから、私はできませんそれに比べると、無視... –

+0

。 –

+0

あなたはあなたのロジックを変更することができます... –

答えて

5

毎回を入力してください。と入力すると、 '\ n'がstdinに残ります。 2回目の呼び出しは、別の関数の引数であるので、あなたは、#include <ctype.h>によってそれを無視して、私はできません

do { 
    option = fgetc(stdin); 
} while(isspace(option)); 

を書くことができます。まあ

、あなたはまた、入力用に独自の関数を書くことができます。

int getOption(void) 
{ 
    int option; 
    do { 
     option = fgetc(stdin); 
    } while(isspace(option)) 
    return option; 
} 
+0

ありがとう!これは動作します! –

関連する問題