『独習C 第3版』 の問題です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
さくら

『独習C 第3版』 の問題です

#1

投稿記事 by さくら » 15年前

初めて質問します。
独習Cで今、getchar()というところの練習問題が分かりません。
自分なりにプログラムを作り、実行してみたのですが上手くいかず、どこが間違っているのか分かりません。
長文になってしまいますが、よろしくお願いします。

 問題
10個の英字を読み取るプログラムを作成してください。
その中からアルファベット順に並べたとき、最初にくる文字を表示するものとします。

●プログラムコード
#include<stdio.h>
int main(void)
{
int i;
char ch1,ch2;
ch2 = 'z';

printf("10個の英字を入力してください。\n入力された英字を順番に並べた時、最初にくるものを最期に表示します。\n");
printf("英字の順番は A,B,…,Z,a,…z です。\n");

for( i=1 ; i<=10 ; i++ ){
printf("%dつ目の英字を入力してください:",i);
ch1 = getchar();
if(ch1<ch2){
ch2 = ch1;
}
}

printf("入力された英字の中で最初にくる文字は%cです。\n",ch2);

return 0;
}

●コンパイル結果
h:\C_prog\chapter03\3.01>bcc32 prog01.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
prog01.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

●実行結果
h:\C_prog\chapter03\3.01>prog01
10個の英字を入力してください。
入力された英字を順番に並べた時、最初にくるものを最期に表示します。
英字の順番は A,B,…,Z,a,…z です。
1つ目の英字を入力してください:a
2つ目の英字を入力してください:3つ目の英字を入力してください:b
4つ目の英字を入力してください:5つ目の英字を入力してください:c
6つ目の英字を入力してください:7つ目の英字を入力してください:d
8つ目の英字を入力してください:9つ目の英字を入力してください:e
10つ目の英字を入力してください:入力された英字の中で最初にくる文字は
です。

―――――――――――――――――――――――――――――――――――
このような状態です。今回はa,b,c,d,eと入力しました。
実行すると、2,4,6,8,10個目の英字の入力が飛ばされてしまい、最期に英字も表示できてません。
何がダメなのか分からないので、教えて下さい。
よろしくお願いします。

たいちう

Re:『独習C 第3版』 の問題です

#2

投稿記事 by たいちう » 15年前

キーワード:getchar バッファ クリア

さくら

Re:『独習C 第3版』 の問題です

#3

投稿記事 by さくら » 15年前

たいちうさん、早い回答ありがとうございます!
分かりやすいヒントでした。
バッファのクリアについては、後でやると書かれていたので深く考えずにやってしまいました…。
今の段階ではgetcharでやるのは無理そうなので、今回はgetche()でやってみることにします。

閉鎖

“C言語何でも質問掲示板” へ戻る