ページ 11

エラーが出て困っています。

Posted: 2009年4月11日(土) 10:36
by ひで
#include <stdio.h>
#include <conio.h>

int main(void)
{
	char user_form[1000];
	int user_sure=0;

	printf("入力された文字を暗号化にします。\n");
	printf("文字を入力してください。\n");
	scanf("%s",user_form);
	printf("入力された文字は「%s」です。\n",user_form);
	printf("よろしければ「1」を、訂正する場合は「0」を入力してください。");
	scanf("%d",user_sure);

	if(user_sure == 0)
	{
		while(user_sure != 1)
		{
			printf("もう一度文字を入力してください。\n");
			scanf("%s",user_form);
			printf("入力された文字は%sです。",user_form);
			printf("よろしければ「1」を、訂正する場合は「0」を入力してください。");
			scanf("%d",user_sure);
		}
	}
	getch();
	return 0;
}
まだ作成段階でまだまだ長くなっていくのですが、もうすでにエラーです・・・wwww
コンパイルはエラーにならないのですが、実行すると「エラー送信しますか」という文字が出てきます。
VC++2008を使用しています。
なんで実行エラーになるのでしょうか?

(2009/4/12 10:00管理人によりタイトルが変更されました)

Re:えらー

Posted: 2009年4月11日(土) 11:06
by 山崎
どうもこんにちは。

scanfを使っている部分ですが、これは
scanf("%s",user_form) と scanf("%d",user_sure) を
scanf("%s",&user_form) と scanf("%d",&user_sure) に
しなければいけないですね。
scanf系の関数は、後ろの変数名の前に「&」をつけなければなりません。
私もこれを忘れて以前相当苦労しました・・・。

がんばってくださいね~!

Re:えらー

Posted: 2009年4月11日(土) 11:08
by 初級者
scanf() の第2引数には
アドレスを指定する必要があります。

Re:えらー

Posted: 2009年4月11日(土) 11:47
by 初級者
>山崎さん

user_form の前の & は不要です。
配列名は、その配列の先頭要素のアドレスを示します。

Re:えらー

Posted: 2009年4月11日(土) 11:52
by toyo
%sでchar配列に入れる場合は&つけなくて
scanf("%s", user_form)
で大丈夫ですよ
scanf("%d",&user_sure)
は&が必要です
if(user_sure == 0)
	{
	}
は次のwhileで同じことを判定してるので不要です

Re:えらー

Posted: 2009年4月11日(土) 14:54
by ひで
みなさん、ありがとうございます。^^

やっと解決しました。
これからいろいろ作っていくので、またわからないことがあったら質問させていただくこともあると思いますがそのときはよろしくお願いします。

Re:えらー

Posted: 2009年4月11日(土) 15:04
by ひで
すみません。解決にしてしまいましたが、もう一つ質問がありました。
たとえば「こんにちは」と入力した場合、scanfでuser_formに入力された文字列はuser_form[0]に格納されると思うのですが、それを
[1]=こ
[2]=ん
[3]=に
[4]=ち
[5]=は
[6]=NULL
となるように格納することは出来ないのでしょうか?

Re:えらー

Posted: 2009年4月11日(土) 15:26
by dic
char user_form[1000]
なので user_form[0] = "あ";
は型が合いませんので無理です

Re:えらー

Posted: 2009年4月11日(土) 15:37
by ひで
dicさん、ありがとうございます。
もしそのような処理をしたいならどのようにしてユーザーに入力させればいいのでしょうか?

Re:えらー

Posted: 2009年4月11日(土) 16:22
by lbfuvab
ひらがなは基本的に2byte文字なので無理です。(少なくともVC++2008やVC++2005やBCCでは)
Shift-JIS環境では(WinXPなど)

char buf[5];
strcpy(buf,"あ");
とした場合
buf[0]=0x82
buf[1]=0x9e
buf[2]=0
と言う風に格納されます。(http://www.rtpro.yamaha.co.jp/RT/docs/m ... -sjis.html)

Re:えらー

Posted: 2009年4月11日(土) 16:31
by ひで
なるほど!!!!
strcpyを使えば入力できるってことですか^^

Re:えらー

Posted: 2009年4月11日(土) 16:59
by ひで
でも、そうするとユーザーからの入力されないですよね?

Re:えらー

Posted: 2009年4月11日(土) 17:09
by Mist
> ひらがなは基本的に2byte文字なので無理です。(少なくともVC++2008やVC++2005やBCCでは)

だから

> [1]=こ
> [2]=ん
> [3]=に

なんてことは出来ないってことだけど。
No:32021をよく読みましょう。
あと、文字列についてもうちょっと勉強するべきかも。

user_form[1]から格納する方法は

scanf("%s", &user_form[1]);

Re:えらー

Posted: 2009年4月11日(土) 17:32
by ひで
はい。
ひらがなでなくローマ字でいいので格納したいのです。

scanf("%s",user_form);

hello
と入力したら
[0]=h
[1]=e
[2]=l
[3]=l
[4]=o
[5]=NULL
と格納されるようにしたいのです・・・・

Re:えらー

Posted: 2009年4月11日(土) 17:37
by box
> scanf("%s",user_form);
> で
> hello
> と入力したら
> [0]=h
> [1]=e
> [2]=l
> [3]=l
> [4]=o
> [5]=NULL
> と格納されるようにしたいのです・・・・

そのように入ってます。
ただし、最後の[5]はNULLではなくて'\0'です。

Re:えらー

Posted: 2009年4月11日(土) 18:01
by ひで
そうだったのですか・・・
では、
printf("%s",user_form[0]);
としたら「h」が表示されるのですか?

Re:えらー

Posted: 2009年4月11日(土) 18:03
by box
'h' 1文字を出力するときには
"%s"
ではなくて
"%c"
を使います。

Re:えらー

Posted: 2009年4月11日(土) 18:14
by ひで
ありがとうございます。^^
これで大体解決しました。

さすがハッカーまでなるとこんなの簡単なんでしょうね@@
私も頑張ります。