fgets

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

fgets

#1

投稿記事 by drow » 14年前

fgetsで入力した数字が正しく表示されません
初歩的な問題ですがおしえてください。お願いします。

include<stdio.h>

void swap(int *,int *);

int main(void){
int x,y;
char s[2];
printf("2つの整数値を入力してください:");
//scanf("%s",s);
fgets(s,sizeof(s),stdin);  //*1
s[1] = '\0';//改行削除

scanf("%d",&y);

// x = atoi(s[0]);
 x = s[0];
printf("変数xは%d、変数yの値は%dです。\n",s[0],y);   //*1で入力したxが正しく表示されない


swap(&x,&y);
printf("swap()を呼び出した後の変数xの値は%d,変数yの値は%dです。\n",x,y); //swapは上手くいく

return 0;
}

void swap(int *x,int *y){
int temp;
temp = *x;
*x = *y;
*y = temp;
}

やんち

Re: fgets

#2

投稿記事 by やんち » 14年前

コード:

printf("変数xは%d、変数yの値は%dです。\n",s[0],y);   //*1で入力したxが正しく表示されない
文字コードを表示しているんじゃないか。

ASCII 文字コード表を参照して見てください。
・ASCII文字コード : IT用語辞典
http://e-words.jp/p/r-ascii.html

後、フォーラムルールも確認しておいてください。
・フォーラムルール
http://dixq.net/board/board.html

drow

Re: fgets

#3

投稿記事 by drow » 14年前

すいません
[1] 質問文
 [1.1] 自分が今行いたい事は何か
 昔勉強した課題の復讐
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 先ほど記載しました
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 fgets関数を使って、入力すると入力した数字のアスキーコードが表示されてしまう。
 [1.4] 今何がわからないのか、知りたいのか
fgets関数を使って、3と入力したら、表示の所で(swap後の表示も)3と表示されるようにしたいがわからない。
アスキーコードが表示されるのではなく、入力した数字が表示されるようにしてほしい
[2] 環境  
 [2.1] OS : Windows, Linux等々
 [2.2] コンパイラ名 : gcc

[3] その他
 大学で習いはじめて2年目です

hangman

Re: fgets

#4

投稿記事 by hangman » 14年前

printf("変数xは%d、変数yの値は%dです。\n",s[0],y);  //*1で入力したxが正しく表示されない

上記の部分ですが、
” xは%d ”に対して” s[0] ”をあてているので文字のアスキーコードが表示されます。

これを入力文字のまま出力したいなら、” xは%c ”ですね。

そして、x = s[0]; では先ほどと同様、xにs[0]のコードが入ってしまいます。

よって数字にしたいなら、 x = atoi(s); にすると良いでしょう。

non
記事: 1097
登録日時: 15年前

Re: fgets

#5

投稿記事 by non » 14年前

>fgets関数を使って、3と入力したら、表示の所で(swap後の表示も)3と表示されるようにしたいがわからない。

まず、アスキーコード表でググって、文字の0~9までのアスキーコードを調べましょう。
文字3のアスキーコードは16進数で○○Hですね(注:○は伏せ字です。Hは16進数の意味)
では、これを数字の3にするには、xxHを引けばいいですね。(xxも伏せ字)
つまり、○○H-xxH=3 なので
x = s[0]-xxH;
  
もちろん、hangmaさんが仰っているように、atoiを使ってもかまいません。
数字が1桁とは限らないので、もう少し工夫が必要だと思いますが。
non

drow

Re: fgets

#6

投稿記事 by drow » 14年前

ありがとうございます。
atoi でうまくいきました。

またよろしくお願いします。

閉鎖

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