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

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

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

#1

投稿記事 by ひで » 16年前

#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:えらー

#2

投稿記事 by 山崎 » 16年前

どうもこんにちは。

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

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

初級者

Re:えらー

#3

投稿記事 by 初級者 » 16年前

scanf() の第2引数には
アドレスを指定する必要があります。

初級者

Re:えらー

#4

投稿記事 by 初級者 » 16年前

>山崎さん

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

toyo

Re:えらー

#5

投稿記事 by toyo » 16年前

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

ひで

Re:えらー

#6

投稿記事 by ひで » 16年前

みなさん、ありがとうございます。^^

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

ひで

Re:えらー

#7

投稿記事 by ひで » 16年前

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

dic

Re:えらー

#8

投稿記事 by dic » 16年前

char user_form[1000]
なので user_form[0] = "あ";
は型が合いませんので無理です

ひで

Re:えらー

#9

投稿記事 by ひで » 16年前

dicさん、ありがとうございます。
もしそのような処理をしたいならどのようにしてユーザーに入力させればいいのでしょうか?

lbfuvab

Re:えらー

#10

投稿記事 by lbfuvab » 16年前

ひらがなは基本的に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:えらー

#11

投稿記事 by ひで » 16年前

なるほど!!!!
strcpyを使えば入力できるってことですか^^

ひで

Re:えらー

#12

投稿記事 by ひで » 16年前

でも、そうするとユーザーからの入力されないですよね?

Mist

Re:えらー

#13

投稿記事 by Mist » 16年前

> ひらがなは基本的に2byte文字なので無理です。(少なくともVC++2008やVC++2005やBCCでは)

だから

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

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

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

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

ひで

Re:えらー

#14

投稿記事 by ひで » 16年前

はい。
ひらがなでなくローマ字でいいので格納したいのです。

scanf("%s",user_form);

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

box

Re:えらー

#15

投稿記事 by box » 16年前

> scanf("%s",user_form);
> で
> hello
> と入力したら
> [0]=h
> [1]=e
> [2]=l
> [3]=l
> [4]=o
> [5]=NULL
> と格納されるようにしたいのです・・・・

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

ひで

Re:えらー

#16

投稿記事 by ひで » 16年前

そうだったのですか・・・
では、
printf("%s",user_form[0]);
としたら「h」が表示されるのですか?

box

Re:えらー

#17

投稿記事 by box » 16年前

'h' 1文字を出力するときには
"%s"
ではなくて
"%c"
を使います。

ひで

Re:えらー

#18

投稿記事 by ひで » 16年前

ありがとうございます。^^
これで大体解決しました。

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

閉鎖

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