入力したcharの中身が消えてしまいます。
Posted: 2014年12月03日(水) 23:28
charの中身を別関数で変更するとmainに戻った時に消えてしまいます。
---------------------------------------------------------
コード1
---------------------------------------------------------
#include <stdio.h>
void input(char one) {
//どちらでやっても同じです。
//scanf("%c", &one);
//one = getchar();
}
int main(void) {
char one = '\0';
input(one);
printf("%c\n", one);
return 0;
}
---------------------------------------------------------
---------------------------------------------------------
実行結果1 (入力文字 a)
---------------------------------------------------------
Macintosh:~ user$
a
Macintosh:~ user$
---------------------------------------------------------
以上のコード1だと消えてしまいますが
以下のコード2のように配列にすると受け取れます。
---------------------------------------------------------
コード2
---------------------------------------------------------
#include <stdio.h>
void input(char one[]) {
scanf("%c", one);
}
int main(void) {
char one[1];
input(one);
printf("%s\n", one);
return 0;
}
---------------------------------------------------------
---------------------------------------------------------
実行結果2 (入力文字 a)
---------------------------------------------------------
Macintosh:~ user$
a
a
Macintosh:~ user$
---------------------------------------------------------
C言語を学び始めて間もないので、とても初歩的なミスかもしれませんが
char には何か特別なルールでもあるのでしょうか?
自分で調べても理由がわからなかったのでご教授お願いします。
ーーーーーーーーーーーーーーーー
環境
使用コンパイラ CC
・Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
・Target: x86_64-apple-darwin14.0.0
・Thread model: posix
OS
・OS X Yosemite (10.10.1)
・MacBook Air (11-inch, Mid 2012)
・プロセッサ 1.7 GHz Intel Core i5
・メモリ 4 GB 1600 MHz DDR3
使用エディタ
・CotEditor 2.0.2
保存形式
・改行コード CR/LF
・エンコーディング Unicode (UTF-8)
・拡張子 .c
---------------------------------------------------------
コード1
---------------------------------------------------------
#include <stdio.h>
void input(char one) {
//どちらでやっても同じです。
//scanf("%c", &one);
//one = getchar();
}
int main(void) {
char one = '\0';
input(one);
printf("%c\n", one);
return 0;
}
---------------------------------------------------------
---------------------------------------------------------
実行結果1 (入力文字 a)
---------------------------------------------------------
Macintosh:~ user$
a
Macintosh:~ user$
---------------------------------------------------------
以上のコード1だと消えてしまいますが
以下のコード2のように配列にすると受け取れます。
---------------------------------------------------------
コード2
---------------------------------------------------------
#include <stdio.h>
void input(char one[]) {
scanf("%c", one);
}
int main(void) {
char one[1];
input(one);
printf("%s\n", one);
return 0;
}
---------------------------------------------------------
---------------------------------------------------------
実行結果2 (入力文字 a)
---------------------------------------------------------
Macintosh:~ user$
a
a
Macintosh:~ user$
---------------------------------------------------------
C言語を学び始めて間もないので、とても初歩的なミスかもしれませんが
char には何か特別なルールでもあるのでしょうか?
自分で調べても理由がわからなかったのでご教授お願いします。
ーーーーーーーーーーーーーーーー
環境
使用コンパイラ CC
・Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
・Target: x86_64-apple-darwin14.0.0
・Thread model: posix
OS
・OS X Yosemite (10.10.1)
・MacBook Air (11-inch, Mid 2012)
・プロセッサ 1.7 GHz Intel Core i5
・メモリ 4 GB 1600 MHz DDR3
使用エディタ
・CotEditor 2.0.2
保存形式
・改行コード CR/LF
・エンコーディング Unicode (UTF-8)
・拡張子 .c