C言語なら俺に聞け! Part 105

このエントリーをはてなブックマークに追加
942デフォルトの名無しさん:2005/04/07(木) 08:56:17
>>939
環境によるが、コマンドプロンプトから

 prog.exe param

などの様に打つと、
argcに「2」、argv[]に「prog.exe」「param」が格納される。
と言う環境がほとんどだ。

それ以前に、君は「コマンドプロンプトとはどのようなものか?」
から勉強すべきだろう。
943もうすぐ就職試験 ◆pTadMR86pE :2005/04/07(木) 09:18:34
>>941-942
以下のようなプログラムです。

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
 FILE *fp;
 char ch;
 long l;
 
 if(argc!=2) exit (1);

実際にdirで見ても表示されますし、プログラム的にも間違いは無いは無いと思うのですが、
何か原因があるのでしょうか?
944デフォルトの名無しさん:2005/04/07(木) 09:30:11
プログラムが間違ってる。そのプログラムにはファイルを読み込む部分が無い。
945もうすぐ就職試験 ◆pTadMR86pE :2005/04/07(木) 09:46:40
>>944
実際にはこの下にもプログラムが続いています。
しかし、printfでチェックしてみたのですが、上記のifにすらプログラムが進んでいませんでした。
946デフォルトの名無しさん:2005/04/07(木) 09:48:53
>>945
プログラムのつづきキボンぬ
947デフォルトの名無しさん:2005/04/07(木) 10:04:11
なんだかよく分からないけど、
「数値を入力してください」
って表示する別のコマンド実行してるんじゃないの?
自分で作ったコマンドの名前は何なんじゃ?
948デフォルトの名無しさん:2005/04/07(木) 10:06:56
情報を小出しする馬鹿につきあってると疲れるぜ?
949デフォルトの名無しさん:2005/04/07(木) 10:09:24
これ以上環境やらIDEやらの質問が続くなら続くんなら他スレ行けよ。
950デフォルトの名無しさん:2005/04/07(木) 10:34:22
プログラム名とコマンドが同じとか?
951デフォルトの名無しさん:2005/04/07(木) 11:05:39
int main(int argc, char *argv[])
{ <-これ
に対応する
} <-これ
まで出てこないと、わかりません。
952デフォルトの名無しさん:2005/04/07(木) 11:06:42
落ちたな
953デフォルトの名無しさん:2005/04/07(木) 11:54:22
コマンドライン引数の事を聞く奴はこんなんばっかだな…。
954デフォルトの名無しさん:2005/04/07(木) 12:00:53
結局解決したが、アホらしい原因だったので、説明するのが面倒で逃げたんだろうな。
955デフォルトの名無しさん:2005/04/07(木) 12:02:15
>>953
ギク
956もうすぐ就職試験 ◆pTadMR86pE :2005/04/07(木) 12:16:59
結局原因が分かりませんでした。
付録のサンプルコードをコンパイルしてみても駄目だったので、
コマンドラインの指定の仕方が不味かったみたいです。
ただ、他のソースは無事に実行できるので、
できなかったことはねじ伏せます。
いろいろ教えていただいたのにすみませんでした。

いよいよ構造体だ・・・。
957デフォルトの名無しさん:2005/04/07(木) 12:39:00
>>956
他人の意見・質問をスルーするなら書き込むな。
958950:2005/04/07(木) 12:43:31
次スレ立てますたヽ(´ー`)ノ
C言語なら俺に訊け! Part 106
http://pc8.2ch.net/test/read.cgi/tech/1112845322/
959デフォルトの名無しさん:2005/04/07(木) 14:04:33
文字列を数値として大小比較できる関数はありませんか?
文字列"0000000000000000001234567890"と
文字列"1234567890"は等しいと判断させたいのです
桁数が大きいので数値に変換するのは無理っぽいです
960デフォルトの名無しさん:2005/04/07(木) 14:06:34
先頭から続く0を無視すれば良いだけだろ
961デフォルトの名無しさん:2005/04/07(木) 14:19:27
"0000000000000000001234567890"なら32bitのintに
変換できる筈だがな。

32bitに収まらない数も扱うなら、long long int型でも使えば?
962デフォルトの名無しさん:2005/04/07(木) 14:24:27
まぁ、文字のままで比較するなら、

1.先頭の0を除く
2.文字数を比べる
3.文字数が同じなら、strcmpで比べる

で出来る。
963デフォルトの名無しさん:2005/04/07(木) 14:24:42
"9999999999999999999999999999"
964デフォルトの名無しさん:2005/04/07(木) 14:26:33
>2.文字数を比べる
この必要性が分からない。
965デフォルトの名無しさん:2005/04/07(木) 14:44:36
>>964
大小比較だからじゃない?
ん?strcmp?しらね。
966デフォルトの名無しさん:2005/04/07(木) 15:14:41
new BigDecimal("0000000000000000001234567890").equals(new BigDecimal("1234567890"))
967デフォルトの名無しさん:2005/04/07(木) 15:17:15
こっちかな?
new BigInteger("0000000000000000001234567890").compareTo(new BigInteger("1234567890"))
968デフォルトの名無しさん:2005/04/07(木) 15:26:52
スレ違いになってきたぞ。
969デフォルトの名無しさん:2005/04/07(木) 15:31:30
>>964
strcmp は辞書順だから、桁数が違うと
"1000"< "200" になる。
970デフォルトの名無しさん:2005/04/07(木) 15:48:47
面倒くさいので動作テストはしてない。
数値以外の文字の混入は考慮無し。

int CmpNumStr (char *a, char *b)
{
int n;

while (*a == '0')
a++;
while (*b == '0')
b++;

n = strlen(a) - strlen (b);
if (n < 0)
return -1;
if (n > 0)
return 1;

return strcmp(a,b);
}
971デフォルトの名無しさん:2005/04/07(木) 16:01:34
よく考えたら、strcmpの帰り値は、
-1や1だという規定は無いから、
n<0 n>0 のままで返していいか・・・

int CmpNumStr (char *a, char *b)
{
int n;

while (*a == '0')
a++;
while (*b == '0')
b++;

n = strlen(a) - strlen (b);

return n ? n : strcmp(a,b);
}
972デフォルトの名無しさん:2005/04/08(金) 17:29:40
さぁ、いよいよ構造体だ・・・。
973デフォルトの名無しさん:2005/04/08(金) 19:19:04
>>959
符号はないのか?
974デフォルトの名無しさん:2005/04/08(金) 22:23:19
スペースは? カンマは?
975デフォルトの名無しさん:2005/04/08(金) 23:19:09
読み飛ばせよ
976デフォルトの名無しさん:2005/04/09(土) 07:44:28
小数点以下は?
記数法は?
977デフォルトの名無しさん:2005/04/09(土) 08:00:36
(*(*hello)[5][5])[5]
一体、hello には何が入るのですか?
978デフォルトの名無しさん:2005/04/09(土) 09:56:56
>>977
hello is pointer to array of array of pointer to array
helloは配列へのポインタの配列の配列へのポインタ
http://kmaebashi.com/programmer/pointer.html
979デフォルトの名無しさん:2005/04/09(土) 11:07:31
>977
そんな変数を宣言していること事態が間違いの始まり。
データ構造を見直した方が良いと思われ・・・
980デフォルトの名無しさん:2005/04/09(土) 11:17:40
>>979
アフォか
見たこと/使ったことのない宣言が出てきただけで設計ミスであってたまるか
経験値低いぺーぺーがわかったつもりになってるとそんなことを言い出して無駄に流れを乱す
981デフォルトの名無しさん:2005/04/09(土) 12:08:20
現在○%、みたいに処理の進行状況をprintfで表示したいんですけど
%の部分はそのままで○の部分だけを上書きして表示していくにはどうすればいいんですか?
982デフォルトの名無しさん:2005/04/09(土) 12:09:41
標準ライブラリではたぶんできない。
983デフォルトの名無しさん:2005/04/09(土) 12:12:17
通常の端末なら、
for (ic = 0; ic <= 100; ++ic) {
printf("%3d%%\r", ic);
}
で巧いこと表示できるかもしれない。
984デフォルトの名無しさん:2005/04/09(土) 12:12:31
できる。
985デフォルトの名無しさん:2005/04/09(土) 12:12:57
>>981
linux?windows?
986デフォルトの名無しさん:2005/04/09(土) 12:14:14
ncurses使うと楽だよ。
987デフォルトの名無しさん:2005/04/09(土) 12:19:23
>>983
スゲー
今試してみたらできました!!
ありがとうございます

>>985
ウインドウズです


その他のレスくれた人もありがとう

988デフォルトの名無しさん:2005/04/09(土) 12:29:32
>>977
世界地図を二次元座標表現し各地域での挨拶を表現する文字列の先頭4文字を座標上に配置したデータ全体へのポインタがhello。
これを惑星ごとに用意して切り替えることができる。
989983:2005/04/09(土) 12:33:54
あーちくしょう。
fprintf(stderr, ...)にしないとリダイレクトで喰われるし、フラッシュされないからダメって書きにきたら…
ウィンドウズだったか(ヶ
990デフォルトの名無しさん:2005/04/09(土) 14:56:04
みんな>>988みたいに理解できてるのかと思うと鬱だわ
頭のメモリが足りねえ・・・
991デフォルトの名無しさん
ワロスww