dポイントプレゼントキャンペーン実施中!

こんにちわ,
今Cの勉強をしているんですが,入力をして,何も入力しないもしくは20字以上だと再入力させるのプログラムを作りたいんですけどどうしたらよろしいでしょうか。
charsk[21];

start1:
while(stdin = "
puts("入力");
if ((*fgets(sk,sizeof(sk),stdin) < 0x21) || strlen(sk) >= 21 )
{
  puts("error");
  goto start1;
}
だと,20字以上のときにstdinのバッファに残ってしまってエラー表示が2度出ます。
ちなみにfflush(stdin)は使用できないANSI C規格です。
よろしくお願いします。

A 回答 (2件)

#include <stdio.h>



main()
{
  char sk[21] ;
  int i ;

  i = -1 ;
  puts("入力");
  do {
    i ++ ;
    if ( i > 21 ){
      puts("\nerror\n入力");
      i = 0 ;
    }
    sk[i] = getch();
    printf("%c",sk[i]);
  } while ( sk[i] != 0x0D );
}
これだと21文字目を入れた時点でerrorを表示します。
ENTERを押した時点でerrorを表示して再入力させるのであれば、
#include <stdio.h>

main()
{
  char sk[21],c ;
  int i ;

  i = -1 ;
  puts("入力");
  do {
    i ++ ;
    if ( i < 21 ){
      c = sk[i] = getch();
    } else if ( c == 0x0D ){
      puts("\nerror\n入力");
      i = 0 ;
      c = sk[0] = getch();
    } else {
      c = getch();
    }
    printf("%c",c);
  } while ( !( c == 0x0D && i < 21 ) );
}
でいかがでしょうか。
    • good
    • 0

start1へ飛ぶ前に残りを全部読んでしまったら?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています