入力制限のしかた

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

入力制限のしかた

#1

投稿記事 by いさご » 18年前

こんばんは。度々すみません・・・。いさごです。
今度は入力する回数の制限でわからなくなりました。
数字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で調べる・・・?
という変な方法しか思いつきません。
どなたかいい方法をご存知でしたら教えてください。
お願いします。

miyaza

Re:入力制限のしかた

#2

投稿記事 by miyaza » 18年前

つまりscanf()を呼び出して四つ目の値を入力させたあとにエラーと出すということですか?

いさご

Re:入力制限のしかた

#3

投稿記事 by いさご » 18年前

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

miyaza

Re:入力制限のしかた

#4

投稿記事 by miyaza » 18年前

では、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;
}

miyaza

Re:入力制限のしかた

#5

投稿記事 by miyaza » 18年前

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

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

いさご

Re:入力制限のしかた

#6

投稿記事 by いさご » 18年前

miyazaさん、回答ありがとうございます。すみません。

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

miyaza

Re:入力制限のしかた

#7

投稿記事 by miyaza » 18年前

三つの数を入力して四つ目が入力されたらエラーを出すですね。
その条件なら私が先ほど書いたソースでも大丈夫だと思います。

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

むつ

Re:入力制限のしかた

#8

投稿記事 by むつ » 18年前

>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:入力制限のしかた

#9

投稿記事 by 組木紙織 » 18年前

リダイレクトで入力した場合のみですが、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:入力制限のしかた

#10

投稿記事 by いさご » 18年前

ご回答くださった方々、本当にありがとうございます。
色々と参考にさせていただいて、なんとか作ることができました。
お手数おかけしてすみません。ありがとうございました!

閉鎖

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