2016-09-13 18 views
0

次のコードを書くとき。パテは、テキストを出力しますが、私は、例えばfgets関数が機能しません

...以下のものを入力することはできません。

まず彼はprintf - >あなたは誰ですか?

次に、私は通常、何かを入力して、仕事をしないでfgetsします。

最後に、彼は別のprintfと言います。お会いできて良かったです...

int main(void) 
{  
    /* USER CODE END 1 */ 

    /* MCU Configuration----------------------------------------------------------*/ 

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ 
    HAL_Init(); 

    /* Configure the system clock */ 
    SystemClock_Config(); 

    /* Initialize all configured peripherals */ 
    MX_GPIO_Init(); 
    MX_I2C1_Init(); 
    MX_USART2_UART_Init(); 

    /* USER CODE BEGIN 2 */ 

    char name[10]; 
    printf("Who are you? \n"); 
    fgets(name,10,stdin); 
    printf("Good to meet you, %s.\n",name); 
    return(0); 
} 

誰でもお手伝いできますか?感謝! ありがとう!

+0

あなたは 'fgets'を使っています(タイトルが示すように' fgetc'ではありません) –

+0

このfgetsの前に他の入力文はありますか? – Karthick

+2

どのプラットフォーム、どのコンパイラ、どの標準ライブラリですか? –

答えて

0

fputsの実装をソースコードに上書きしました。したがって、リンカーはその関数のライブラリ実装をルックアップする必要はありません。 fputcの実装では、stdio-output-pathをUARTトランスミッタに接続しています。

対応する入力パスを定義する必要があります。これは、fgetc関数を実装することで実現できます。ライブラリ関数fgetsはあなたの関数を呼び出すことができ、UART受信機をポーリングすることができます。

組み込み環境でのstdioのデフォルト実装は、ベンダーによって大きく異なります。これは、JTAGデバッガ

  • マイクロコントローラ特定のデバッグ/コンソールポート
    • に接続することができます。

    したがって、お客様は、その接続の適切な実施を行う責任があります。これは、コール時にUARTで受信されたデータがあるかどうかをチェックする必要があるため、fputcの実装よりも補完的です。

  • +0

    私は今何を意味するのではない..私のコードではどうすればいいのですか? – metalgastje

    関連する問題