C言語なら俺に聞け(入門篇) Part 13
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/05/16(水) 16:53:13・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 12
http://pc11.2ch.net/test/read.cgi/tech/1178620766/
過去スレ
Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/ Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
0002デフォルトの名無しさん
2007/05/16(水) 16:55:31C/C++の宿題を片付けます 86代目
http://pc11.2ch.net/test/read.cgi/tech/1165718021/
くだすれC言語(初心者用) Part.2
http://pc11.2ch.net/test/read.cgi/tech/1172099763/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
はきだめC/C++下級者の質問箱 2
http://pc11.2ch.net/test/read.cgi/tech/1156206091/
関連リンク
C 関数検索 man on WWW
http://www.linux.or.jp/JM/
初心者のためのポイント学習C言語
http://www9.plala.or.jp/sgwr-t/
WikibooksのC言語の教科書
http://ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E
0003デフォルトの名無しさん
2007/05/16(水) 17:15:040004デフォルトの名無しさん
2007/05/17(木) 00:39:44scanfを使って2つの変数を入力したいんですが、
sanf("%d",&a,b);
こんな感じで良いのでしょうか?動作環境がないため確認お願いします。
0005デフォルトの名無しさん
2007/05/17(木) 00:40:45sanf("%d %d",&a,&b);
0006デフォルトの名無しさん
2007/05/17(木) 00:41:32>>4
scanf("%d %d",&a,&b);
0007デフォルトの名無しさん
2007/05/17(木) 00:43:05早速の回答ありがとうございました。
0008デフォルトの名無しさん
2007/05/17(木) 01:41:51main関数の中で宣言した int a[3][3]をほかに自分で宣言、定義した関数に渡すときとか。
0009デフォルトの名無しさん
2007/05/17(木) 01:50:38引数の宣言は int a[][3] でいいかな
0010デフォルトの名無しさん
2007/05/17(木) 02:04:14回答、ありがとうございました
0011デフォルトの名無しさん
2007/05/17(木) 15:53:010012デフォルトの名無しさん
2007/05/17(木) 15:56:26cにはnewなんてありません。
0013デフォルトの名無しさん
2007/05/17(木) 16:17:42(ここでの単語とは、ブランク,タブ,改行文字で区切られた文字)
例えば、
This is a book.
と入力すると、
This
is
a
book.
と表示される。
while((c=getchar()) != EOF)
という文を使って文章を入力するらしいのですが、どうやって表示させればいいのかわかりません。
教えてください。
0014デフォルトの名無しさん
2007/05/17(木) 16:20:01001513
2007/05/17(木) 16:21:45すみませんでした。
0016デフォルトの名無しさん
2007/05/17(木) 17:34:160017デフォルトの名無しさん
2007/05/17(木) 17:50:57while((c=getchar())!=EOF) {
putchar(c);
if(c==' '||c=='\t'||c=='\n') putchar('\n');
}
0018デフォルトの名無しさん
2007/05/17(木) 19:04:11改行セパレータの時に二重改行しちゃうかららめぇ。
if(c==' '||c=='\t'||c=='\n') putchar('\n'); else putchar(c);
0020デフォルトの名無しさん
2007/05/17(木) 20:13:17こうやってスレの使い分けも出来ない莫迦が存在する限り、このスレは必要なんですよ。
0021デフォルトの名無しさん
2007/05/17(木) 20:15:55それは>13に書かれた要件を超えた要求だな。
そもそも○投げなら宿題スレにいけ。
0023デフォルトの名無しさん
2007/05/17(木) 20:21:36スレの先頭くらい見ような。
>1 名前:デフォルトの名無しさん[] 投稿日:2007/05/16(水) 16:53:13
>C言語の入門者向け解説スレです。
>・C++言語はスレ違いです。
>・分からない事をなるべく詳しく書いて下さい。
>・ソースコードを晒すと答えやすくなるかもしれません。
>・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
>前スレ
>C言語なら俺に聞け(入門篇) Part 12
>http://pc11.2ch.net/test/read.cgi/tech/1178620766/
>
>過去スレ
>Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/ Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
>Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/ Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
>Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/ Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
>Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/ Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
>Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/ Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
>Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
>
>2 名前:デフォルトの名無しさん[] 投稿日:2007/05/16(水) 16:55:31
>関連スレ
>C/C++の宿題を片付けます 86代目
>http://pc11.2ch.net/test/read.cgi/tech/1165718021/
>くだすれC言語(初心者用) Part.2
>http://pc11.2ch.net/test/read.cgi/tech/1172099763/
>スレを勃てるまでもないC/C++の質問はここで 2
>http://pc11.2ch.net/test/read.cgi/tech/1178503366/
>はきだめC/C++下級者の質問箱 2
>http://pc11.2ch.net/test/read.cgi/tech/1156206091/
0024デフォルトの名無しさん
2007/05/17(木) 20:21:47【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 131
http://pc11.2ch.net/test/read.cgi/tech/1170338926/
くだすれC言語(初心者用) Part.2
http://pc11.2ch.net/test/read.cgi/tech/1172099763/
【初心者歓迎】C/C++室 Ver.34【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1169039760/
0025デフォルトの名無しさん
2007/05/17(木) 21:18:060026デフォルトの名無しさん
2007/05/17(木) 21:26:28ttp://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_2.html
-o file
002725
2007/05/17(木) 23:01:48有難う御座いました。
0028sage
2007/05/18(金) 03:12:47辞書順にクイックソートするアルゴリズムを作ったのですが、
並び替えた結果を見ると、ところどころ並び替えを間違えています。
原因がまったくわかりません。どのように直せばいいのでしょうか?
line[]が文字列の入っている配列です。
void Swap(int i, int j) //交換する
{a = line[i];
line[i] = line[j];
line[j] = a; }
void QSort(int left, int right)
{ int i,j,middle;
i = left; /* ソートする配列の一番小さい要素の添字 */
j = right; /* ソートする配列の一番大きい要素の添字 */
middle = (left + right) / 2; /* 基準値を配列の中央付近にとる */
while (1) {
while (strcmp(line[i],line[middle])<0) /* 基準より辞書順に後ろにある文字列が */
i++; /* 出るまで i を増加させる */
while (strcmp(line[j],line[middle])>0) /* 基準より辞書順に前にある文字列が */
j--; /* 出るまで j を減少させる */
if (i >= j) break; /* i >= j なら無限ループから抜ける */
Swap(i, j); /* line[i] と line[j]を交換 */
if ((middle -left) > 0) /* 基準値の左に 2 以上要素があれば */
QSort(left, middle-1); /* 左の配列を クイックソートする */
if ((right - middle)> 0) /* 基準値の右に 2 以上要素があれば */
QSort(middle+1, right); /* 右の配列を クイックソートする */
}
0029デフォルトの名無しさん
2007/05/18(金) 04:15:50を
line[i]-line[middle]<0
にしてみたら?その下も同じ。
strcmpは文字列を比較する関数であって、
1文字をあらわすline[i]の比較には使えない。
0030デフォルトの名無しさん
2007/05/18(金) 05:12:33line[middle]と同じ値は左右どっちに移動すると思う?
>>29
そんなミスだったらコンパイル通らないでしょ。
003130
2007/05/18(金) 05:27:53これはちょっと言葉が足りなかった、すまん。
1, 2, 50, 1, 1
こんな例で考えてみればわかるかな。
0032デフォルトの名無しさん
2007/05/18(金) 06:33:22どういう風に組むのがいいでしょうか?
0033デフォルトの名無しさん
2007/05/18(金) 06:42:16C++でvectorを使う
0034デフォルトの名無しさん
2007/05/18(金) 06:54:25malloc() realloc() free() などを使うといいと思うよ
0035デフォルトの名無しさん
2007/05/18(金) 10:46:41セレクタ値とオフセットアドレスで指定しているのかを知りたいですが、
#include <stdio.h>
void foo(void){};
int main(void)
{
void (*hoge)()=foo;
printf("hoge of address is %p\n",hoge);
return 0;
}
これを実行したら
hoge of address is 00401000
と表示されました。
この上位16ビット(0040h)はセレクタ値で、下位16ビット(1000h)がオフセットアドレスですか?
0036デフォルトの名無しさん
2007/05/18(金) 11:11:570037デフォルトの名無しさん
2007/05/18(金) 11:33:490038デフォルトの名無しさん
2007/05/18(金) 11:53:15003935
2007/05/18(金) 12:16:52その本ではリアルモードの時に関数へのfarポインタにセレクタ値16ビットと関数のオフセットアドレスをくっ付けたものを代入して
プロテクトモードに移行してからそのポインタを参照してました
0040デフォルトの名無しさん
2007/05/18(金) 12:30:50>環境はWinXP
これでかなーり事情が変わるので Advanced Windows でも嫁となる
0041デフォルトの名無しさん
2007/05/18(金) 12:57:06OSのブート部分を書くのでない限り、セグメントのことは忘れてあげて
ください。
0043デフォルトの名無しさん
2007/05/18(金) 16:52:24はじめて読む486だったら、もっと後のページで32ビットアドレスの話が出てくるはず。
これはようするにオフセットが32ビットになっているモード。
Win32アプリケーションは、その32ビットアドレスのモードで動く。
35のコードで出力された32ビットのアドレスも全てオフセット値。
ちなみに、Win16アプリケーションなら16ビットセレクタと16ビットオフセットを使う。
0044デフォルトの名無しさん
2007/05/18(金) 18:25:45fgetsは読み込んだ文字列がバッファに入りきったかどうか判別できませんよね?
改行で読み終わった場合は、バッファに改行コードがあるかどうかで読みきれたかどうか
判別できます。しかしEOFで読み終わった場合はそれが判別できないと思うのですが。
入力→バッファがあふれたらstdinをクリアして再入力
という処理を確実に行うにはどうすればいいのでしょうか。
0046デフォルトの名無しさん
2007/05/18(金) 18:55:50>EOFで読み終わった場合はそれが判別できないと思うのですが。
char buf[1000];
fgets(buf,1000,stream);
だとして
文字数のチェックして999未満ならEOF、または改行で終了した
そして最後に改行文字がなければEOFって判断できるんじゃない?
0047デフォルトの名無しさん
2007/05/18(金) 18:59:190048デフォルトの名無しさん
2007/05/18(金) 19:01:07fgets は,stream から文字を読み込んで文字列 s に格納します。読み込みは n-1 個の文字を読み込むか,または改行文字を読み込んだときに終了します。
改行文字で終了した場合には fgets は,s の最後に改行文字を格納します。
s に読み込まれた文字の最後にはヌルターミネータが付加されます。
0049デフォルトの名無しさん
2007/05/18(金) 19:02:42>EOFで読み終わった場合は
読み込み中にファイルの終わりに達したら
そこまでのデータが読み込まれる。
↓
更に読もうとしたら NULL が返るし、feof() を呼べば 0 以外が返る。
>バッファがあふれたらstdinをクリアして再入力
バッファを拡張して続きを読めばいいでないの。
>>47
fread() と間違えてる?
0050デフォルトの名無しさん
2007/05/18(金) 19:09:30バッファぴったりに読んだ場合、更に読もうとしたら入力待ちにならない?
0051デフォルトの名無しさん
2007/05/18(金) 19:14:570052デフォルトの名無しさん
2007/05/18(金) 19:17:10思いっきりボケてたわスマン
恥ずかしい・・・
0053デフォルトの名無しさん
2007/05/18(金) 19:24:36ごめん、俺よくわかってない、入力待ちって?
>バッファぴったりに読んだ場合
char buf[10];
fgets(buf,10,stream);
として9文字の入力を読み込んだときってこと、それとも10文字?
0054デフォルトの名無しさん
2007/05/18(金) 19:26:250055デフォルトの名無しさん
2007/05/18(金) 19:45:420056デフォルトの名無しさん
2007/05/18(金) 19:49:05そういうこなのかな
stdinから読み込んでバッファが空になったら入力待ちになるのは当然な気が・・・
それでも問題にはならないと思うけど
こんなコードでも問題なく動作するし
#include <stdio>
int main()
{
FILE *in;
char buf[5];
while(fgets(buf,5,stdin)!=0)
{
printf("%s ",buf);
}
return 0;
}
0057デフォルトの名無しさん
2007/05/18(金) 19:49:460058デフォルトの名無しさん
2007/05/18(金) 19:59:432回目の入力待ちは避けたい場合ね。
0059デフォルトの名無しさん
2007/05/18(金) 20:00:30改行含めて4文字以下のときにアウトだろ
0060デフォルトの名無しさん
2007/05/18(金) 20:03:39そういうことか
>>59
>>58って事ならアウトだね、確かに
006144
2007/05/18(金) 20:33:05安全な入力を実現するにはどうすればいいかを考えており、
検証するためにテストプログラムを作っています。
http://www.uploda.net/cgi/uploader4/index.php?file_id=0000013415.c
このプログラムで、改行で読み終える場合はバッファオーバーフローの
危険を回避することが出来たのですが、EOFで入力を終了した場合の
対応策を考えられなかったので、このような質問をしました。
006244
2007/05/18(金) 22:05:46適切ではありませんね。すみません。
バッファサイズを超える入力を受けたとき、環境に依存しない方法で
stdinをクリアし、再入力を促す。ということです。
0063デフォルトの名無しさん
2007/05/18(金) 22:15:50ソース見ていいたい事分かった・・・気がする
極力元ソース変えないようにしたけどこれではダメ?
#include <stdio.h>
#include <string.h>
int main(void)
{
int num = 0;
char c,buf[5];
for (;;) {
printf("整数を入力してください : ");
fgets(buf, sizeof(buf), stdin);
/* バッファサイズをオーバーした場合、stdinをクリアし、再入力 */
if (strchr(buf, '\n') == NULL) {
scanf("%*[^\n]%*c");
/* 正常に読み取れた場合 */
} else {
if (sscanf(buf, "%d", &num) != EOF) {
break;
}
}
fprintf(stderr, "入力でエラーが発生しました\n再入力してください\n");
}
printf("num = %d\n", num);
return 0;
}
006463
2007/05/18(金) 22:19:24if (strchr(buf, '\n') == NULL) {
scanf("%*[^\n]%*c");
}
fgetsでbuf に取り込んだ文字列内に'\n'がない場合は
scanf("%*[^\n]%*c"); によって入力バッファの以降の文字をスキップする
正確には %*[^\n] で'\n'の一つ前までをスキップして %*c で'\n'そのものをスキップする
でバッファ内には残らなくなる・・・的な・・・
006863
2007/05/19(土) 20:06:13scanf("%*[^\n]%*c"); を rewind(stdin); に変えると環境によってはうまくいくんだけど
MS的にはおkとしている
でも他の環境だと・・・
環境依存なものはダメだよね?
0069デフォルトの名無しさん
2007/05/19(土) 20:18:49007044
2007/05/19(土) 20:26:58環境依存OKだとその方法で出来てしまうんですよね…。
if (feof(stdin)) {
/* エラー処理 */
exit(1);
}
このへんで妥協するしかないですかね。
どうやらfgetsはEOFで読み終わった場合はstdinにEOFが残された状態になるらしく、
再入力を求める場合、どうしても無限ループになってしまいます。
007163
2007/05/19(土) 20:41:25そうなの?
ファイルの終端に達したからといってクローズされるとは思わないけど
それとも勝手に閉じられてしまうの?
>>70
って事は環境依存はダメって事ね
0073デフォルトの名無しさん
2007/05/19(土) 22:01:130075デフォルトの名無しさん
2007/05/20(日) 00:26:01しかし行列をtempという作業用行列に渡す時にエラーが出ます。
http://www.uploda.org/uporg815439.c.html
環境はgcc3.3.6
どこがいけないのでしょうか。教えてください。
ちなみにベクトルの代入は成功してるようです。
0076デフォルトの名無しさん
2007/05/20(日) 00:44:28多次元配列(厳密にはただの配列と一緒なんだが・・・)を仮引数とするときは
最初(最後だったかもしれん)の1つ以外は指定しなければならないという制限があったはず
そうしないとコンパイラがポインタ値をいくつスライドさせりゃいいのか分からんからな
0077デフォルトの名無しさん
2007/05/20(日) 00:54:00http://www.uploda.org/uporg815517.c.html
一応行列式は算出してくれます。
でもこれだと100次元にするときはいちいち3を100に書き換える必要がある。
これじゃ次元をint nで渡してる意味がない。
せめて[][2]を[][n]という形でかけるといいのですが、やりかたはないでしょうか?
007863
2007/05/20(日) 01:00:21関数宣言で
int a_substitute(int a[][])
としているでしょ
関数に配列を渡すときには”配列”としてではなく”ポインタ”として渡される
引数に配列が使えるのはコンパイラ段階で引数が分かっていることが前提
ところがコンパイラ上で渡された配列のサイズが不明なためコンパイルできない
int a_substitute(int a[][2]) とすればコンパイルは通る
と計算といってるけど、これからその部分書くの?
0080デフォルトの名無しさん
2007/05/20(日) 01:02:26プログラムうp遅れすまそ。
上にうpしたやつです。名前はmatrix.cといいます。
しかしこれでは希望の仕様を満たさない。
どうすればいいのやら・・・これが出来たら次は外積のプログラムを作りたいのですが。
これでは応用が効かない。
0081デフォルトの名無しさん
2007/05/20(日) 01:02:28手持ちのC99仕様書によるとこういう宣言も認められるらしいが使ったことないので分からん
試してみてくれ
T foo(int n, int m, T' a[n][m]);
0082デフォルトの名無しさん
2007/05/20(日) 01:03:53main関数内で行列なりベクトルなりの次元を取得して
それを引数にするためプリプロセッサでは無理ですね。
それでは書き換えるのと大差ない。
0083デフォルトの名無しさん
2007/05/20(日) 01:04:45ど、どういう意味ですかその宣言方法は。
なんか光明が
0084デフォルトの名無しさん
2007/05/20(日) 01:07:58double *temp;
//中略
temp = (double*)malloc(sizeof(double)*n*n);
for(i=0; i<n; i++) for(j=0; j<n; j++) temp(i*n+j) = a(i*n+j)
//後略
ってやるのはどう?
関数に渡すときにキャストして。
0085デフォルトの名無しさん
2007/05/20(日) 01:10:07おそらくC99で追加された可変長配列(配列宣言時にConstantでなくVariableを大きさとして指定できる配列)を
仮引数並びに使ってるんだろうが詳しくは知らん
gcc3.3.6ならC99対応してるだろうからおそらく通るとは思うが通らない可能性も否定できん
0086デフォルトの名無しさん
2007/05/20(日) 01:13:47main () {
char text;
printf ("Please Input Key : ");
text = getchar ();
printf ("Input key is %c.",text);
if (text != 'z') {
printf ("\nPlease Input Key : ");
text = getchar ();
switch (text) {
case 'Y':
case 'y':
printf ("Y");
0087デフォルトの名無しさん
2007/05/20(日) 01:14:50case 'N':
case 'n':
printf ("N");
break;
default:
printf ("$");
}
}
return 0;
}
0089デフォルトの名無しさん
2007/05/20(日) 01:16:21なんとなくやってみたら出来たっ!!
(a[][n], int n) => (int n, a[][n])
と後ろに置けばおkみたいですね。もちろんa[n][n]でもおk(まぁ無駄だけど)
感動・・・
完成プログラムを置いておきます。
http://www.uploda.org/uporg815567.c.html
a[0][n]がいいかa[n][n]がいいか。どちらがベストかは微妙です。
0090デフォルトの名無しさん
2007/05/20(日) 01:19:00配列わかってねー
0091デフォルトの名無しさん
2007/05/20(日) 01:19:18メッセージを出し、キーを入力させ
入力したキーを表示させます
もし入力されたキーがzなら終了
z以外なら再入力を促し
YないしyならYを表示→終了
NないしnならNを表示→終了
それ以外なら$を表示→終了
としたいのですが、どうも再入力を受け付けてくれません
この場合、変数を増やしてやるほかに方法は無いのでしょうか?
rewind (stdin);を入れてやれば、一応は解決したのですが
こうするとバッファデータが全部ロストするみたいなので、余り良くないんじゃないかなぁ・・・と
それとrewind (stdin);を入れて、再入力した場合
何を入れても$が表示されてします
復改というのでしょうか?
\nが混じるのが問題みたいなんですが
これを除去する良い方法はないのでしょうか?
0092デフォルトの名無しさん
2007/05/20(日) 01:19:52むつかしい。理解不能でつ
キャストとかポインタが連発するともう解析不可能・・・
0094デフォルトの名無しさん
2007/05/20(日) 01:22:24その方法だと、配列が小さいときは良いが、でかくなったときにオーバーヘッドが大きすぎないか?
0095デフォルトの名無しさん
2007/05/20(日) 01:22:52訂正
”それとrewind〜方法はないのでしょうか?”は無視してくださってかまいません
ですが、改行を読み飛ばす方法は教えてくださると幸いです
調べたらgetchar ();をダブらせるといいとか、fgetsで関数を組むみたいなことを見つけたのですが
いかんせん上手くいきません・・・
0096デフォルトの名無しさん
2007/05/20(日) 01:23:40*temp(i*n+j) = *a(i*n+j)
だろ
0097デフォルトの名無しさん
2007/05/20(日) 01:24:02現在stdinにある文字を改行含めて読み飛ばすならこれでいける
scanf("%*[^\n]%*c");
0098デフォルトの名無しさん
2007/05/20(日) 01:27:38なんか混ざってるw
p[i*n+j]もしくは*(p+i*n+j)が正解
0099デフォルトの名無しさん
2007/05/20(日) 01:45:40固定長の配列版と較べて、遜色ない速度にまで最適化されるから心配なし。
つーか、激しく常套手段。ついでに、i * n + jの部分を別関数にしても問題なし。
Ex. size_t offset(unsigned, i, unsigned j, size_t n) {return i * n + j;} ... temp[offset(i, j, n)] = a[offset(i, j, n)];
0100デフォルトの名無しさん
2007/05/20(日) 01:48:51>>86-87の派生版に
それを組み込んでみたんですが、上手く動作しません
原因は大体解ってるんですが、やり方がわからないんですよね・・・
ソース
http://www.borujoa.org/upload/source/upload11705.c
scanf("%*[^\n]%*c");の組み込み位置が可笑しいのは解ってるんですが
(一応、前のtextに引っ掛けてるつもりです)
全部読み飛ばすと判定が出来なくなるというか、入力する意味が失われますので
getcharで読み飛ばしを試みてるのですが、どうしても読み飛ばされないです
どうすればswitchの判定を有効に出来るのでしょうか?
(printfで確認した限りでは、defaultしか動いてない)
0101デフォルトの名無しさん
2007/05/20(日) 02:06:38処で、switchがまともに動かない直接原因ではないが、getchar()の戻り値はintで受けるべき。
で、EOFが帰ってきたらその処理もした方がよさそうだが。
■ このスレッドは過去ログ倉庫に格納されています