またも質問です

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

またも質問です

#1

投稿記事 by ボムボム » 17年前

最長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:またも質問です

#2

投稿記事 by 学食 » 17年前

fgetsではダメな理由があるのでしょうか?


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

ボムボム

Re:またも質問です

#3

投稿記事 by ボムボム » 17年前

fgetsでは2,30文字を入力するとバグが発生するので使えません。
タイトルについてはすいませんでした。

学食

Re:またも質問です

#4

投稿記事 by 学食 » 17年前

fgetsの直後に
rewind(stdin);
を書くと、配列の定義を超える長さの
文字を入力したとき遭遇する現象を
回避できると思います。

ボムボム

Re:またも質問です

#5

投稿記事 by ボムボム » 17年前

返信ありがとうございます。
rewind(stdin); は試して指導員に見せたのですが
「getcharにしろ」と言われました。

学食

Re:またも質問です

#6

投稿記事 by 学食 » 17年前

最大10回まわるループを作ります。
入力した文字がEOFならば、
10回まわらないうちにループから抜ける
ことを考慮に入れておきます。

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

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

ボムボム

Re:またも質問です

#7

投稿記事 by ボムボム » 17年前

試してみます。
やはりfgetにもバグというか良くない点があるみたいですね。
そういった点を回避するならfgetでもいいと言われました。
そこを詳しく調べつつ課題をやってみます。
ご協力有難う御座いました。

閉鎖

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