ページ 11

入力制限のしかた

Posted: 2007年3月27日(火) 19:26
by いさご
こんばんは。度々すみません・・・。いさごです。
今度は入力する回数の制限でわからなくなりました。
数字3つを読み取るプログラムで、4つ目の入力があれば
エラーを出さなければならないのですが、方法がわからず困っています。

int main(){

int num[3];
int i=0;

printf("数字を3つ入力してください\n");
while(i < 3){
scanf("%d", &num);
i++;
}

return(0);
}

ここまでは出来たのですが・・・。
int num[4]にして、num[3]をisdigitとisalphaで調べる・・・?
という変な方法しか思いつきません。
どなたかいい方法をご存知でしたら教えてください。
お願いします。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 20:38
by miyaza
つまりscanf()を呼び出して四つ目の値を入力させたあとにエラーと出すということですか?

Re:入力制限のしかた

Posted: 2007年3月27日(火) 21:26
by いさご
ちょっと言い方がおかしかったかもしれません。すみません。
はい、四つ目に何らかの値が入力されればエラーを出す、と言うことです。
思いついたのはscanf()を使う事だったのですが・・・。
他に簡単な方法ご存知でしたら教えてください。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 21:35
by miyaza
では、iの値で判断というのはどうでしょう。
#include <stdio.h>

int main(){
	int num[4];
	int i=0;

	while(1){
		scanf("%d",&num);
		if(i==3){
			printf("4つ目の値は入力できません。\n");
			break;
		}
		i++;
	}
	return 0;
}

Re:入力制限のしかた

Posted: 2007年3月27日(火) 21:58
by miyaza
しかし絶対三つの値を入力するという条件のもと四つ目の値を入力したらエラーですか。
ループ文で作るとしたらwhile(i<3)等の条件式で十分だと思うのですが、三つまでではなく三つ入れるのが絶対条件なら四つ目を入れる余地はないと思うのですが。
三つ入れた後も入力可能で、尚且つ四つ目を入力するとエラーだとすると、ループを抜ける手段が四つ目を入れるか、そもそも四つ目を入力させないかしか無いと思うのですが。

つまり何が言いたいかというと私が作った上記のプログラムでは四つ目を入力するまでループを抜けられません。
すいません。たぶんやりたいのは、こんなことじゃないですよね。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 22:44
by いさご
miyazaさん、回答ありがとうございます。すみません。

もう一度紙をよく読んでみたら、やっぱり絶対に3つ必要なのであって、
入力数が3つ以外は全て不可にしろとかいてありました・・・。
どうすればいいのか混乱中です・・・。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 23:07
by miyaza
三つの数を入力して四つ目が入力されたらエラーを出すですね。
その条件なら私が先ほど書いたソースでも大丈夫だと思います。

余計な事を書いて逆に混乱させてしまったとしたら、すみません。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 23:26
by むつ
>printf("数字を3つ入力してください\n");
これは以下の様に、空白等で区切られた数値を3つとも解釈できますよね!?
○123 456 789
×123 456 789 012 ...
あまりお勧めできないけど、こんな風に取得できる。
scanf( %d %d %d, &num[ 0 ], &num[ 1 ], &num[ 2 ] );
他には、
fgets()でとって、strtokでトークンに分割するとか。
これであれば4つ目(以上)の入力でエラーというのもうなずけるかなと。
また、数値以外の入力のチェックが出来きていいかと思います。

Re:入力制限のしかた

Posted: 2007年3月27日(火) 23:30
by 組木紙織
リダイレクトで入力した場合のみですが、3つの数字以外はすべてはじきます。
コンソールからはまったく想定していません(笑)

参考程度に。
#include<stdio.h>

int main(void)
{
	int i[3], count=0;
	while(scanf("%d",&i[count])>0){
	
		if(++count > 3){
		 	printf("error\n");
		 return 0;
		}
	}
 	if(count < 3){
	 	printf("error_2\n");
		return 0;
	}
//countの再利用	
	for(count =0;count<3;count++){
	 	printf("%d\n",i[count]);
	}


 	return 0;
}

Re:入力制限のしかた

Posted: 2007年3月28日(水) 19:55
by いさご
ご回答くださった方々、本当にありがとうございます。
色々と参考にさせていただいて、なんとか作ることができました。
お手数おかけしてすみません。ありがとうございました!