ページ 11

またも質問です

Posted: 2008年4月17日(木) 18:47
by ボムボム
最長10文字の文字列を二件入力して、char型の配列にそれぞれ格納する。文字列を比較して同じならequal、違うならnot equalを表示するプログラムをつくる。ただし一件ごとの入力はユーザー定義関数で行なう。という課題がでました。
途中まで作ったのですが、fgetsをgetcharに直す上手いやり方がわかりません。教えて下さい。お願いします。
#include<stdio.h>
#include<string.h>

#define max_length 10

void get_string (char *p_str, int size);

int main(void)
{
	char string1[max_length+1];
	char string2[max_length+1];

	get_string(string1,max_length+1);
	get_string(string2,max_length+1);

	if(!strncmp(string1,string2,max_length))
	{
		printf("equal");
	}
	else
	{
		printf("Not equal");
	}
	return 0;
}



void get_string (char *p_str, int size)
{
	
	fgets(p_str,size,stdin);
	
}

Re:またも質問です

Posted: 2008年4月17日(木) 19:51
by 学食
fgetsではダメな理由があるのでしょうか?


「またも質問です」よりも、「文字列の入力と比較」のように、
投稿内容を的確に反映したタイトルを
考えてみてはいかがですか?

Re:またも質問です

Posted: 2008年4月17日(木) 20:15
by ボムボム
fgetsでは2,30文字を入力するとバグが発生するので使えません。
タイトルについてはすいませんでした。

Re:またも質問です

Posted: 2008年4月17日(木) 20:29
by 学食
fgetsの直後に
rewind(stdin);
を書くと、配列の定義を超える長さの
文字を入力したとき遭遇する現象を
回避できると思います。

Re:またも質問です

Posted: 2008年4月17日(木) 20:36
by ボムボム
返信ありがとうございます。
rewind(stdin); は試して指導員に見せたのですが
「getcharにしろ」と言われました。

Re:またも質問です

Posted: 2008年4月17日(木) 21:55
by 学食
最大10回まわるループを作ります。
入力した文字がEOFならば、
10回まわらないうちにループから抜ける
ことを考慮に入れておきます。

ループの中では、入力した文字を
所定の場所に格納します。

ループから抜けたら、文字列終端の'\0'をセットします。

Re:またも質問です

Posted: 2008年4月18日(金) 00:25
by ボムボム
試してみます。
やはりfgetにもバグというか良くない点があるみたいですね。
そういった点を回避するならfgetでもいいと言われました。
そこを詳しく調べつつ課題をやってみます。
ご協力有難う御座いました。