###C言語、標準入力(stdin)のバッファのクリア方法について
C言語始めたばかりの初心者です。C言語のバッファのクリアの方法がわかりません。教科書にはfflush(stdout)という方法が載っているのですが、それを使わないでお願いします。
###設問
画面イメージに従いプログラムを作成しなさい。
6文字以上入力された場合"ERROR:6文字以上です。"と画面にエラーを出力し再入力を求める機能です。
問題
画面イメージ
5文字までの文字列を入力してください
>abcde
入力したのは5文字です。入力した文字列はabcdeです。
5文字までの文字列を入力してください
>aaaaaaaaaaaaaaaaaaaaaa
ERROR:6文字以上です。
5文字までの文字列を入力したください。
**fgets関数を使う**
該当のソースコード
#include<stdio.h> //定数定義 #define ARRAY_SIZE 7 void Intrim(char *str){ char *p; p=strchr(str, '\n'); if(p !=NULL){ *p='\n'; } } int main(void){ char str[ARRAY_SIZE]; int n; while(*str !='\n'){ printf("5文字までの文字列を入力してください。>\n"); fgets(str, sizeof(str), stdin); n=strlen(str)-1; str[n-1]='\n'; if(*str =='\n'){ break; } if(n>7){ printf("ERROR:6文字以上です。"); }else{ printf("入力したのは%dです。\n", n); printf("入力した文字列は%dです。\n", str); } } return 0; }
試したこと
実行してみたら、aaaaaaaaaaaaaaaaaなどを入れた場合、バッファがクリアされずに入力された文字はaaaaa
入力された文字列はaaaa・・・・とエラーが表示されません。
補足情報(FW/ツールのバージョンなど)
fgets関数で取得した改行コード'\n'をstrchr関数でnull文字に変える事もやっています。
正直、自分で書いてみて今現在何をしているのかよくわからない状態です。
回答2件
あなたの回答
tips
プレビュー