C言語なら、俺に聞け! <22>
■ このスレッドは過去ログ倉庫に格納されています
0001日下部陽一
NGNGいろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/
・前スレ
<21> http://pc.2ch.net/test/read.cgi/tech/1022045622/
他のリンクは>>2-10を見な。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG#line で探す
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGんなもんすべての行に出てる必要ない。
カーソル位置の行番号は出てるし。
0157デフォルトの名無しさん
NGNG目が覚めた
0158デフォルトの名無しさん
NGNGMS-DOSのedit
0159デフォルトの名無しさん
NGNGこういうこと言う奴必ずいるよな。
というわけでviを薦める。
0160デフォルトの名無しさん
NGNGモジラが重いので却下
0161デフォルトの名無しさん
NGNGコンパイルは難しいかもしれんが、フォトショ
0162デフォルトの名無しさん
NGNGint main();
int main()
{
int c;
while((c=getchar()) !='.'){
printf("%c",c);
}
return (0);
}
かなりの初心者です。
はじめにcは整数型と宣言してるのに
なぜwhile文ではchar型で表示してるんですか?
型というものがわからなくなってきた。。。
0163デフォルトの名無しさん
NGNGchar,intともに整数型だから互換性がある。
intで受けるのはgetcharがEOFも返すから。
0164デフォルトの名無しさん
NGNG初心者のおいらにはついていけないことが書いてある。。。
おいらの勉強している本には
intは整数型、charは文字型って書いてあるよ?
charは整数型なの?
>intで受けるのはgetcharがEOFも返すから
これはさっぱりわからない。。。
0165デフォルトの名無しさん
NGNG整数型
0166デフォルトの名無しさん
NGNGcharは整数型って大抵のほんに書いてある??
「C言語プログラミングレッスン入門偏」(結城浩)って本にはかいてないよ。
「C言語プログラミングレッスン入門偏」(結城浩)この本いい本ですか?
0167デフォルトの名無しさん
NGNGcharは1バイトの整数型。
> >intで受けるのはgetcharがEOFも返すから
> これはさっぱりわからない。。。
char型がコンパイラによっては符号なしだから(処理系依存)、負の数のEOFを受けるとまずい。
というわけでint型で受ける。
0168デフォルトの名無しさん
NGNGC言語ではchar型は整数型の一種でint以下のサイズ。
char -> int への拡大は暗黙で変換してくれる。
また関数の引数で型がプロトタイプ宣言に含まれてない場合、charの値はintに勝手に格上げされる。
printfの第二引数以降は可変引数のため型が明示されていないためあてはまる。
getchar()はcharで表せるすべての値に加えてEOFという値も返すため、charより大きいint型になっている。
0169167
NGNG> getchar()はcharで表せるすべての値に加えてEOFという値も返すため、charより大きいint型になっている。
あぁ、負の数がどうとかじゃなくてそういう理由か。
0170デフォルトの名無しさん
NGNG恥かしい質問ですけどintは何バイトの整数型なんですか?
0171デフォルトの名無しさん
NGNGそれは処理系(とりあえずコンパイラだと考えてよい)によって違う。
必ずcharよりも大きくなければならない(といっても1バイトのcharよりも小さいなんてことはないけどね)。
0172171
NGNGint・・・4バイト
short int・・・2バイト
long int・・・4バイト
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNGワラタ
0175デフォルトの名無しさん
NGNG規格では決まってない。
char <= short <= int <= long
という関係が言えるだけ。
現実はコンパイラごとに好きなように定義されていて、下手するとコンパイラオプションによっても
変わるコンパイラもある。
マニュアル嫁。
0176171
NGNG0177デフォルトの名無しさん
NGNGint main(void);
int main(void)
{
char x,y;
x=-10;
y=1;
printf("%d",x+y);
return (0);
}
これコンパイルして実行できました。
不思議だ。。。
0178デフォルトの名無しさん
NGNG不思議じゃない。
どう表示されるかはコンパイラ次第だけど。
0179デフォルトの名無しさん
NGNG0180デフォルトの名無しさん
NGNG#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x=-256;
y=1;
printf("%d",x+y);
return (0);
}
だと実行結果は1でした。
0181デフォルトの名無しさん
NGNGそうだと本人も言っているだろ。
ところで、数字って(プ
0182デフォルトの名無しさん
NGNG1byte==8bitと仮定して・・・・
charに-256は入らないよ。溢れた分は切り捨てられるはず。
0183デフォルトの名無しさん
NGNG8bitなら
128から-128までしか値を持たないってことですか?
0184デフォルトの名無しさん
NGNG127〜-128(2の補数の場合)か-127(1の補数の場合)
0185184
NGNG0186デフォルトの名無しさん
NGNGなんだこのやろう。このボケが。なにが プ だ。てめーは俺より上にいるつもりか。へっだせーやつだ。
0187デフォルトの名無しさん
NGNGint main(void);
int main(void)
{
char x;
x='5';
printf("%d",x);
return (0);
}
だったら53っていう整数が帰ってきた。
char型は整数型で整数は整数のまま扱い文字列は整数に変換して扱うってこと?
表示する場合%dと整数で表示することもできるし%cと文字として表示することもできる
んですよね?
0188デフォルトの名無しさん
NGNGあー、補数って習ったけど忘れた。。。復習しとこう。
0189デフォルトの名無しさん
NGNG5という文字のコードが53だったというだけ。
0191デフォルトの名無しさん
NGNGごめん。俺が悪かった。>>181の発言は撤回する。
0192デフォルトの名無しさん
NGNG文字コードってあるんだ。。。知らなかった。
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x='5';
y='B';
printf("%d",x+y);
return (0);
}
だと119
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x='5';
y='B';
printf("%c",x+y);
return (0);
}
だとw。
wの文字コードは119ってことですね。
文字コード票みたいなのってあるの?
0193デフォルトの名無しさん
NGNGそれを自分でつくってみよう。
と言いたいところだけど、表示できない文字もあるから・・・・
ASCIIならhttp://www.e-words.ne.jp/page.asp?p=r-ascii
0194デフォルトの名無しさん
NGNGサンクス!
EOFはのってないね。
-128?とにかく負の数なんですね。
0195デフォルトの名無しさん
NGNGstdio.hの中をみるか、printf("%d\n",EOF);で表示してみる。
0196デフォルトの名無しさん
NGNG\x1aじゃなかった?
0197デフォルトの名無しさん
NGNG-1でした。
0198デフォルトの名無しさん
NGNGcharとintの関係がわかりました。
0199デフォルトの名無しさん
NGNG微妙なすれ(×スレ)違いにワラタ
0200デフォルトの名無しさん
NGNGいいGNU ツールが あったら 教え や が れ。
0201デフォルトの名無しさん
NGNGシフトって++だとなくなったの?
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1021787032/l50
シフト演算子のことなら、削るわけないだろ
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG多分
cout << "hello" << endl;
見て愕然となったと思われ。
違う演算子採用しろよと言いたい。
0206デフォルトの名無しさん
NGNG3ヶ月前まではこんなことを言って皆さんをハァハァさせてしまいました。
http://pc.2ch.net/test/read.cgi/tech/1014370940/
だけど、それから優しいお兄さんたちにいろいろと教えてもらいながら、
勉強することで、C言語を大体マスターすることができました。
今ゲームを開発しているのですが、兄さんは僕自身を開発するとか
言って、なかなかプログラミングに集中させてくれません。
質問するたびに僕の体を触ってくるので正直困っちゃってます。
ぼく自身、そういうのは好きだけど、それだけじゃゲーム作りが進まないので、
ここに質問させてください。よろしくお願いします。
FAQ的な質問ならぼくも回答します。間違いがあれば、先輩方の訂正を
お待ちしております。
なお、課題の○投げは一応別スレへ、ということでお願いします。
プライベートな質問に関してはスレの950が過ぎたあたりから受け付けますので
それまでそういったことは、なるべく謹んでください。
0207デフォルトの名無しさん
NGNGgetchar()っていうのは入力された文字の1番初めの文字を
代入する関数で"abc"って入力されたら
x=getchar()のxには"a"が入りますよね。
int c;
while((c=getchar()) !='.'){
printf("%c",c);
}
これで"abc"と入力したらcには"a"が入ってるからずっとaが表示される
と考えてしまったのですが、違いますよね。どこが違うのでしょう。
0208デフォルトの名無しさん
NGNG実行してみたらわかるやん。
0209デフォルトの名無しさん
NGNG"a" ではなく 'a' ね。Cではこの違いは大きい。
で、getchar()は一回呼ぶごとに次の文字を取り出すよ。
whileの条件部は毎回実行される。
0210デフォルトの名無しさん
NGNG'a'って入力された時点getcharは'a'を返しておしまい。
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG>getchar()は一回呼ぶごとに次の文字を取り出すよ。
>whileの条件部は毎回実行される。
初めて知りました。
c=getchar()
で'abc'
って入れたら'a'をかえして
もう一回
c=getchar()
とかくと
'b'を返すんですね。
0213デフォルトの名無しさん
NGNGで'a'と入れたら'a'をかえして
もう一回
c=getchar()
と書いて
'b'と入れたら'b'を返すんですよ。
0214デフォルトの名無しさん
NGNG分からんのかね。
0215デフォルトの名無しさん
NGNG> 初めて知りました。
嘘つくな。
んじゃなきゃwhileは全て0回実行か無限ループか?
0216デフォルトの名無しさん
NGNGc=getchar()
で'ab'と入れたら'a'をかえすんですよね?
0217デフォルトの名無しさん
NGNGそうです。
0218デフォルトの名無しさん
NGNG'ab' ではなく "ab" ね。Cではこの違いは大きい。
0219デフォルトの名無しさん
NGNGwhile使わないでgetchar何回並べて呼んで試してみろよ。
0220デフォルトの名無しさん
NGNGwhile((c=getchar()) !='.'){
printf("%c",c);
}
で'abc'って入力する時
キーボードでaを叩いた瞬間には'a'は表示されませんけど
表示しようとしてるんですか?うーん、説明がへんか。。。
0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG>getchar()は一回呼ぶごとに次の文字を取り出すよ。
を初めて知ったってことです。。。
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGレベルの質問にまじめに答えないで欲しい。
0225デフォルトの名無しさん
NGNG円形脱毛同意
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGって本を読んでるんですけど
getchar()は1文字を標準入力をから得るとしか書かれてないんですが。
この本は説明不足ですか?
0228デフォルトの名無しさん
NGNGって本を読んでるんですけど
getchar()は1文字を標準入力から得るとしか書かれてないんですが。
この本は説明不足ですか?
の間違い。
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG2ちゃんで聞かずにどこかの掲示板で聞いた方が良い?
0231デフォルトの名無しさん
NGNGファイルの現在位置から 1 文字読み出し、関連するファイル ポインタが定義されている場合は次の文字を指すためにポインタを増やします。
これくらい書いてなきゃ説明不足
0232デフォルトの名無しさん
NGNGその文章で
getchar()は一回呼ぶごとに次の文字を取り出すことを
読み取れますか?
0233デフォルトの名無しさん
NGNG分かんなかったらgoogleで調べることくらいしない時点で応用力0です。
0234デフォルトの名無しさん
NGNGそれはgetcharの説明か?
0235デフォルトの名無しさん
NGNGその本を捨てましょう
説明不足かどうかはともかく、読んでも理解できてないってことはあなたにはあってないってことでしょ
あなたにあった、理解できる本を探しましょう
0236デフォルトの名無しさん
NGNG分かりました。2ちゃんでひとに聞く前に自分で調べる癖をつけるようにします。
それでも分からなかったらここに機器にきてもいいでしょうか?
0237デフォルトの名無しさん
NGNGgetcharだよ
といってもgetcと共有なので、ああいう書き方になってるもよう
0238デフォルトの名無しさん
NGNGgetchar()は1文字を標準入力から得るという説明を読んで
getchar()は一回呼ぶごとに次の文字を取り出すことを
読み取れますか?
0239デフォルトの名無しさん
NGNGscanfやgetsをやってれば読み取れる
でも予備知識無しにその1文だけをぱっと見せられたら読み取れないだろうね
(普通はサンプルを見て理解できるもんだと思うけど)
だからそんな糞本捨てちゃえ、と
0240デフォルトの名無しさん
NGNGシフト演算子をつかって書けと言う問題で
#include<stdio.h>
main()
{
unsigned long n,m,b,sho,wrk,i;
printf("n,m?\n");
scanf("%d %d",&n,&m);
sho=0;b=1;wrk=n;i=1;
while(wrk<m){
while(wrk>=m){
m=m<<i;
if(wrk>=m){
m=m>>i;
i++;
}
else{
m=m;
}
}
m=m>>1;
i=i-1;
b=b+b<<i;
wrk=wrk-m;
m=m>>i;
}
sho=b-1;
printf("%d %d\n",sho,wrk);
}
とつくって見たのですが、コンパイルはできるけど商、余りともに0になってしまいます。
自分でつくってみて、トレースしてみてもどこがおかしいのかわかりません。
0、0でコンパイルできるって言う事はwhileの条件がおかしいのかなとも考えたのですがどうも…。
どなたか教えていただけませんでしょうか?
もし、スレ違いでしたら、誘導をお願いいただけませんでしょうか。
PC板は初めてなもので。
よろしくおねがいします。
0241デフォルトの名無しさん
NGNG0242デフォルトの名無しさん
NGNGこれも説明間違ってます?
0243デフォルトの名無しさん
NGNG> while(wrk>=m){
1回も実行されない
0244243
NGNG0245デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGgetsは複数回実行したら同じ文字列を返しますか?
printfは複数回実行したら前に出力した場所を上書きしますか?
その流れでgetcを理解する人間ならその本でもいいでしょう
理解しない人間は別の、もっと正確に解説した本を読みましょう
0248デフォルトの名無しさん
NGNG漏れも捨てていいと思う、その本
0249名無しさん
NGNG0250デフォルトの名無しさん
NGNG果て無き道のり、とかっこつけてみる
0251デフォルトの名無しさん
NGNG本当にそれしか書いてないの?
その本の他の部分でサンプル付きとかで
もっと詳しく解説されてたりするんじゃ?
0252デフォルトの名無しさん
NGNGはい。
お勧めの本はありますか?
■ このスレッドは過去ログ倉庫に格納されています