今日からC言語の勉強はじめました。このスレッドで初心者の人みんなで いっしょに勉強しましょう。
2!
3 :
仕様書無しさん :03/05/13 23:23
int main(int argc,char **argv) { printf("%s\n","頑張ってね"); exit(0); }
4 :
仕様書無しさん :03/05/13 23:24
format c: /q
手遅れ
とりあえず今日はprintf()とscanf() #include 変数の宣言など基本的な 事を勉強しました。 #include<stdio.h> int main(void) { printf("縦を入力してください:"); scanf("%d",&a); printf("横を入力してください:"); scanf("%d",&b) printf("四角形の面積は %d 平方cmです",a*b); return 0; }
あ!変数宣言するの忘れてた。 int a,b;
return EXIT_SUCCESS;
4月から会社に入るのですがC言語ぐらい使えないとダメですよね?
どんな会社だよ。
主に下請けのソフト開発やネットワーク構築などをしている会社です。
4月って来年(2004年)のことか?
ガンガレ
#include <stdio.h> int main() { main(); }
18 :
仕様書無しさん :03/05/14 00:52
2進数を入力すると 10進数に変換して表示するプログラムを書け。
#include <stdio.h> int main() { int x; printf("その2進数を10進数に直して入力してください。\n"); scanf("%d", &x); printf("つまり%dです。\n", x); }
20 :
仕様書無しさん :03/05/14 09:33
{ char str[100]; printf("2進数と入力して下さい\n"); gets(str); if (strcmp(str,"2進数")==0) printf("10進数"); else printf(str); }
レベル高すぎてわからんw
偽PGが多いスレだな。
>>19 ,
>>20 はコメントするまでもない。
そもそも2進数を10進数に変換するコードがない。
>>20 に関してはバカ丸出し。
getsで受け取った数字をatoiで変換する必要性をしらないのだろう。
縦読みだよ、つまり22が言いたいのは 偽 >はそ >g (´・ω・`)
25 :
仕様書無しさん :03/05/14 19:10
C言語のリファレンスなに使ってる?
26 :
仕様書無しさん :03/05/14 19:31
20です。 "2進数と入力して下さい"と表示して入力待ちにしています。 そして"2進数"と正しく入力されたら"10進数"と表示し、それ以外ならば入力文字をそのまま表示しています。 なにか不備がありますか?
int bin2dec(char *str) { int dec = 0, bit, col = 0; char *p = str; /* 尻から */ while (*p) p++; while (isspace(*p) || *p == '\0') p--; /* 変換しる */ while (p >= str) { if (*p == '1') { bit = 1 << col; dec |= bit; } else if (*p != '0') { dec = -1; break; } col++; p--; } return dec; }
int main(int argc, char *argv[]) { int dec = -1; char line[MAXLINE]; printf(" 2進数: "); if (fgets(line, MAXLINE, stdin) != NULL) dec = bin2dec(line); if (dec >= 0) printf("10進数: %d (%x)\n", dec, dec); else fprintf(stderr, "むりぽ\n"); }
参考書として独習Cを買って来ました。なかなかよさげですよね?
さて今から飯食って昨日の続き勉強します!
32 :
仕様書無しさん :03/05/14 20:02
>>30 がんがれ。
一回だけじゃなくて二回も三回もやり直すべし。
そうすれば、力が付くであろう。
>>29 暇つぶしにコンパイルした。
エラーが腐るほど出た。
#include <stdio.h> int main() { printf("2進数を入力すると10進数に変換して表示するプログラム"); }
37 :
仕様書無しさん :03/05/14 20:29
リアル都立工房でつ。プログラマになれまつか? #include <stdio.h> #include <math.h> int main() { int nishin, jushin; int keta; int num; printf("2進数の数値を入力してください: "); scanf("%d", &nishin); jushin = 0; keta = 1; while (nishin > 0) { // 入力値から対象桁の数字を切り出す num = nishin % 10; // 切り出した対象桁の数字に2のn乗をかける // 出力値に加算する if (keta == 1) { jushin += num; } else { jushin += num * (int)pow(2, keta-1); } // 入力値の対象桁以降を消す nishin /= 10; keta++; } printf("10進数にすると[%d]です。\n", jushin); return 0; }
>>36 自分で試してからUPしてくれよ。
新人君のお勉強のスッドレなんだから。
39 :
仕様書無しさん :03/05/14 20:38
次の問題くれクレヨン。
41 :
仕様書無しさん :03/05/14 20:39
>>39 横浜が優勝するためのプログラムを作りたまえ。
42 :
仕様書無しさん :03/05/14 20:45
>>40 このようになりまつよ。
2進数の数値を入力してください: 111
10進数にすると[7]です。
できる限りの優しい使い方してくらさい。
44 :
仕様書無しさん :03/05/14 20:53
Cでは、1文字ずつ切り出すしかないのか? bin2decとはいかんのかな?
入出力は適当に作れ。 long binstr2long(const char *src) { long ret; for (ret=0; *src; src++) { switch (*src) { case '0': case '1': ret <<= 1; ret += *src - '0'; break; case ' ': case '\n': break; /* do nothing */ default: printf("0x%x: Invalid character found.\n", *src); return -1; } printf("> %d\n", ret); } return ret; }
46 :
仕様書無しさん :03/05/14 21:24
10進を16進にするプログラムは、簡単なのに 何故、2進を10進に変換するプログラムでは関数をつくらなきゃならないんだろう。
47 :
仕様書無しさん :03/05/14 21:37
>>43 どういった環境で動いた?
29のプログラムはlsic86はだめだったぞ。
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> main(int argc, char *argv[]) { int dec = -1; char line[MAXLINE]; printf(" 2進数: "); if (fgets(line, MAXLINE, stdin) != NULL) dec = bin2dec(line); if (dec >= 0) printf("10進数: %d (%x)\n", dec, dec); else fprintf(stderr, "むりぽ\n"); }
今日勉強したこと。 #include<stdio.h> int o_to_c(int a); int main(void) { int onsu; printf("オンス数を入力してください:"); scanf("%d"&onsu); printf("カップ数に直すと %d です",o_to_c(onsu)); } int o_to_c(int a) { return a/8; } 関数作れたーーage
Microsoft (R) KKCFUNC バージョン 1.10 Copyright (C) Microsoft Corp. 1991,1993. All rights reserved. KKCFUNC が組み込まれました. マイクロソフトかな漢字変換 バージョン 2.51 (C)Copyright Microsoft Corp. 1992-1993 inu.c 9: illegal character inu.c 10: illegal character inu.c 10: 'MAXLINE' undefined inu.c 10: non-constant expression inu.c 12: illegal character inu.c 13: illegal character inu.c 13: 'MAXLINE' undefined inu.c 14: illegal character inu.c 14: illegal character inu.c 14: Warning: function 'bin2dec' undefined -- assumed to be int inu.c 16: illegal character inu.c 17: illegal character inu.c 17: illegal character inu.c 18: illegal character inu.c 19: illegal character inu.c 19: illegal character C:\lsic86\mysrc>
51は49をコンパイルして出たエラー。
illegual characterは全角空白を半角に置換すれば直るのでは?
54 :
仕様書無しさん :03/05/16 01:43
void B(int *x) { *x = 5; return; } int a = o; B(&a) B(&a)を実行すると5になるらしいのですが、なぜですか? 個人的にはaのポインタをxに代入し、 aのポインタが指し示す0が答えになるんじゃないかなと思うのですが。
> B(&a)を実行すると5になるらしいのですが、なぜですか? aが、ですね? B(&a) -> x = &a -> *(&a) = 5 -> a = 5
>>46 内部表現の数値と文字列の区別が付いてないな?
内部表現には10進も16進もへったくれもないぞ。
関数は別に作らなくても、ある奴使えばよろし。
char ent[] = "10010100", *ep;
long bin = strtol(ent, &ep, 2); /* 2進文字列→数値 */
printf("Decimal: %d\n", bin); /* 数値→文字列で出力 */
ってか、ム板でやれ。マ板にゃ勿体無い(w
58 :
仕様書無しさん :03/05/16 18:27
予期せぬEOFが検出されました エラー1 警告0 EOFって何だ?誰か教えて! C++6,0desu
お題 EOFとは○の略である ↓あとはよろしく
60 :
仕様書無しさん :03/05/16 19:54
>>58 それは
Eat out Of Function's hand (関数のいいなりになる。)
予期していない関数に制御を乗っ取られましたってことなんだね。
まあ、CPUにとっちゃ「えー聞いてないよ!」って感じかな。
61 :
仕様書無しさん :03/05/16 19:55
エラーを消すにはどうすれば・・・・
62 :
仕様書無しさん :03/05/16 20:21
>>26 =
>>20 >なにか不備がありますか?
遅レス スマソ
>char str[100];
>gets(str);
入力文字数が 100 を越えたらどうするんだ?
63 :
仕様書無しさん :03/05/16 20:34
64 :
仕様書無しさん :03/05/16 20:54
>>55 どうせなら正しく説明してやれ!
>>54 まず「B(&a);」の動作は、
関数「B」を呼び出すため引数「&a」をスタックに格納する。
その後、関数「B」を呼び出す。
※ちなみに「&a」とは変数「a」の実体のあるメモリ領域へのアドレスである。
次に呼び出された関数「B」の動作としては、
スタックより引数を取り出し、内部変数「x」に格納する。
そして「*x = 5;」の動作は、
内部変数「x」の値が示すアドレス位置、
つまり変数「a」の実体のあるメモリ領域へのアドレスに定数値「5」を格納する。
よって、変数「a」の内容が「5」となる。
>>58 他のサイトの掲示板に書き込んだね・・・?
66 :
仕様書無しさん :03/05/17 11:15
問題 数当てゲームを作りなさい。
67 :
仕様書無しさん :03/05/17 11:31
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"><meta http-equiv="Content-Style-Type" content="text/css"><title>数当てゲーム</title> <script language="JavaScript"><!-- function FC1(){ QT = Math.floor(Math.random()*9); LT = 3; document.FM.LT.value = LT; document.FM.AS.value = ""; document.FM.CM.value = ""; } function FC2(){ AS = eval(document.FM.AS.value); if ( AS == QT ){ alert("当たり!!"); FC1(); }else{ if ( AS > QT ){ document.FM.CM.value = "もっと小さい!!"; LT -= 1; }else{ if ( AS < QT ){ document.FM.CM.value = "もっと大きい!!"; LT -= 1; }}} if ( LT == 0 ){ document.FM.LT.value = LT; alert("GAME OVER !! " + QT + " !!"); FC1(); } document.FM.LT.value = LT; document.FM.AS.value = ""; } // --> </script></head><body><form name="FM">残り<input type="text" name="LT" size="1"><input type="text" name="CM" size="16"><br><br> 0から9までの数を入力してください<br><input type="text" name="AS" size="1" maxlength="1"><input type="button" name="BT" value="入力" onClick="FC2()"></form> <script language="JavaScript"><!-- FC1(); // --></script></body></html>
>>68 いや、取り敢えずstdafx.hを先頭でインクルードしとけって話だと思う。
70 :
仕様書無しさん :03/05/17 14:30
>>69 closs.cd >> ?pallをpoidすればいいだけだろ?
71 :
仕様書無しさん :03/05/17 14:43
りそな銀行があぼーんするコードを教えてください。
72 :
仕様書無しさん :03/05/17 14:47
class user { Bank *bank; public: void hikidashi(int kingaku) { bank->okane += kingaku; user->okane += kingaku; } };
74 :
◆lYOWRYQhG6 :03/05/17 14:58
10 list 20 goto 10 10 list 20 goto 10 10 list 20 goto 10 10 list 20 goto 10 10 list 20 goto 10 30 Abone!
75 :
仕様書無しさん :03/05/17 23:38
>>66 「数あてゲーム」の定義がないが?
勝手に解釈していいのか?
烈しく誤爆
328は代入に関するスパゲティを用意する事
2進数を10進数に変換するプログラムあったけど 負の数にも対応しる!!
じゃんけんゲームを作れ
83 :
仕様書無しさん :03/05/21 22:40
ぬるぽ
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
85 :
仕様書無しさん :03/05/22 21:58
無理
86 :
仕様書無しさん :03/05/25 04:07
久しぶりだね。C言語は ジャンケンゲームです。 #include "stdafx.h" #include "stdio.h" int main(int argc, char* argv[]) { char a[1]; char *pa; printf("g or t or p\n"); pa = gets(a); if (pa != NULL){ if (a[0] == 'g') printf("COM is p. You lose.\n"); else if (a[0] == 't') printf("COM is g. You lose.\n"); else if (a[0] == 'p') printf("COM is t. You lose.\n"); else printf("error\n"); } else printf("error\n"); return 0; }
>>86 ( ゚Д゚)
お前は、最後の一枚を脱ぐ直前の脱衣マージャンかと
88 :
仕様書無しさん :03/05/25 08:32
#include <stdio.h> #include <stdlib.h> int main(){ int ra,ga,i; srand( (unsigned int)time(NULL) ); ra = (rand()%100)+1; //1〜100の乱数を作成 while(ga != ra){ i++; printf("1〜100までの数字を入力するのだ\n"); ga=getchar(); if(i>0||1<=100){ if(ra==ga){ printf("正解ですな。%d回目",&i); //i=getchar(); } else if(ga<ra){ printf("オマエもまだまだ小さいな。大きくなれ!"); }else if(ga>ra){ printf("大は小を兼ねるという時代は終わりました");} } else{ printf("1〜100の数字って言ってんだろゴルァ"); }} return 1; }
>>88 ちゃんとうごかねぇよ
#include <stdio.h>
#include <stdlib.h>
int main() {
int ra,ga,i;
srand( (unsigned int)time(NULL) );
ra = (rand()%100)+1; //1〜100の乱数を作成
i = 0;
while(++i<=10){
printf("1〜100までの数字を入力するのだ\n");
scanf("%d",&ga);
if(ga<=0 || ga>100){
printf("1〜100の数字って言ってんだろゴルァ");
continue;
}
if(ra==ga){
printf("正解ですな。%d回目",i);
break;
}
else if(ga<ra)
printf("オマエもまだまだ小さいな。大きくなれ!");
else if(ga>ra)
printf("大は小を兼ねるという時代は終わりました");
}
if(i>10)
printf("もうアフォかと\n");
return 1;
}
上から数行読んだ瞬間、ga初期化してねーのに 使ってるのはいいのかな? と思ったおいらは、C言語入門者コース卒業できそうですか?
91 :
仕様書無しさん :03/05/25 15:54
>>90 int ga =getcharってするのと同じ
そろそろGUI使っていこうぜ
#include <windows.h> int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpszArgs,int nWinMode) { MessageBox(NULL,"ぬるぽ","message box",MB_OK); return 0; }
Invalidate Word ("UNKO")
95 :
仕様書無しさん :03/05/25 20:41
>>45 ret <= 1;
の意味が分かりません。ret が数字の 2 だとすると、
この文の結果はどうなるのでしょうか。
96 :
仕様書無しさん :03/05/25 20:43
野糞・ストリート・第10回 真紀俊男って誰?の巻 たまに来る質問で真紀俊男って誰?というのがありますが、お答えしましょう。 あれはネットワーク上に巣くっているヴァーチャルうんこです(本当)。 ま、誰だってええやんか。あれはようするにでんなぁ、 恐山のイタコが呼び寄せる霊みたいなもんであってやね。 そやから、呼び寄せたうんこ星人のうんこが東北弁しゃべっているのは おかしいとか野暮なことをいうもんではない。そういや前世でどこそこの 下痢便やったとか軟便やったとか言う奴はいっぱいおるけど、前世は血便 やったとか固形便やったという奴が一人もおらへんのはなんでやねんと K仲川が言うとったけど、そんなもんや。きっと霊界もバブルの時代の記憶だけは 残りやすいような構造になってのやろ、いっぺん天羽さんに聞いてみておくれやす。 お、こうしている間にも、真紀俊男の霊が降りてきたぞ、お、おっ。。
97 :
仕様書無しさん :03/05/25 22:31
15けたの進数の最大値は、進数で表すと何けたか。 ここで、log102=0,301とする ↑小さい10 この問題がとけないんですが 誰か教えて下さい
98 :
仕様書無しさん :03/05/25 22:41
97は8進数の最大値は、10進数で表すとです すみません
99 :
仕様書無しさん :03/05/25 23:12
>>93 をそのままコピってBorland C++ Compiler 5.5で
コンパイルしたんですけど動きません(exeファイルができない)。
何故でしょうか?
>>91 88のソースはローカル変数のga初期化する前に使ってね?
#include <stdio.h> #include <string.h> #include <stdlib.h> #define COUNT_MAX 999 char Str[][] = {{"■■■■■■■■■■■■■\n"}, {"スレ終了\n"}, {"■■■■■■■■■■■■■\n"}} ; void main(int argc, char* argv[] ) { unsigned char cnt ; for( cnt = 0 ; cnt < COUNT_MAX ; cnt ++ ) { printf("%s",Str[cnt%3]) ; }
>>101 main関数が}で終わってない
unsigned charでは0-999までカウント不可能
よって、コンパイルすら通らん
>>101 は馬鹿丸出しってことか
コマンドライン引数意味無いし
#include<stdio.h> main() {}
105 :
仕様書無しさん :03/05/26 00:12
プロのプログラマーがCでアプリなどを作るときの 環境を教えてください。(コンパイルに使うソフトなど) いずれWinアプリを作りたいならエディタとコンパイラで作るより、 最初から統合開発ツール使ったほうがいいですか? オススメがあったら教えてください。(統合開発ツールの)
107 :
仕様書無しさん :03/05/26 01:04
>>105 「いずれ」と言わず、最初からVC++でWinアプリ作り始めるのが吉。
>>95 >ret <= 1;
それじゃ不等号だべ。ret <<= 1; ね。
A (演算子)= B
は
A = A (演算子) B
と同じ意味。この場合、
ret = ret << 1;
と等価で、『ret を左に1ビットずらす』ことになるわけさ。
で『左に1ビットずらす』のは『2倍する』のと同等、と。
>>103 >コマンドライン引数意味無いし
ANSI C に限って言えば、
意味がなくても付けなきゃダメ
110 :
仕様書無しさん :03/05/26 01:21
>>102 >char Str[][] = {{〜
もね。
じゃぁ、ついでに、string.hとstdlib.hのincludeの必要がないのも つっこんでおこうかな
>>113 それはつっこんでやるなよ。かわいそうだろ?
115 :
仕様書無しさん :03/05/28 03:29
if( !(マジレスしてくれる?)) goto HOGE; fprintf(stdout,"読みやすいソースってなんだんだろう。\n"); HOGE:
make
リダイレクタ マンセー出力はリダイレクタ。これだね。
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
119 :
仕様書無しさん :03/05/29 00:42
LenB(2ch)
1です。早くもC言語を究めてしまいました。 早速お前らの質問に答えてさしあげやうと思いますので どなたかかかって来いやクズが
121 :
仕様書無しさん :03/05/29 21:36
>>120 ActiveX DLLとただのDLLってどうちがうの?
>>121 DLLってのはな、その名の通りCの関数を動的にリンクできるようになっているライブラリだ。 そこは分かるよな? ActiveX DLLってのは、関数しかエクスポートできないDLLを レジストリと関数をうまく組み合わせてC++のクラスをexportできるようにしたものだ。 まぁ厳密に言うとちょっと違うのだがな。 さて、どしどしかかってこいやクズども
>>1 setjump/longjumpの実装方法が分かりません。
おしえて〜
ゴメン、setjmp/longjmp ダターヨ
>>124 マシン語で唯一サポートされているデータ構造、スタック。 関数呼び出しってのはこいつを利用して動作してる、ってのは知ってるだろ? 関数をコールする、ってのを大雑把にまとめると 1.戻ってくるアドレスをプッシュ 2.返り値のためのスペースをプッシュ(returnってのはこのスペースに書き込みを行うんだ) 3.引数をプッシュ こんな感じに動作しているんだ。 ここまで説明すればオマエももうわかっていると思うが、 戻る場所、返り値、引数が入っているスタックを壊さないように setjumpで決めた場所に戻ればいい。な?簡単だろ?
>126 > マシン語で唯一サポートされているデータ構造 はぁ?
>>126 どもありがと。実装方法はやっぱ C の範囲には収まらなさそうですね。
具体的な実装方法は自前で勉強するでつ。
>>127 「はぁ?」だけでなく、オマエが正しいと思うことを書いてみろ。 それはオマエのためでもあり、オレのためでもある。
,,..-''''":::::::::::::::::``''''-、 ,.r''"::''" ̄``''''-、‐''''ー-、::::`>‐''"":ヽ、 /::::::::::::::::::::::::::::::::::::\::::::::`Y/::i::!::::r'"::', ,r':::::::::::::::::::::::::::::::、:::::::::::::::\::::::|:i::::!:;::/:::::::::! ./:::;::ヽ:::::\::::ヾ;::::::::\::::\:::::`、::ゞ、;::::i'::::;;:ノ i:::::i::::|''\`、\::\_;;;;;;;;\:::`;:::::::i;:::::::`'''''「、::::', |:::::|::::|. ヽ;\''"\`ヾ、;|_\::ト、::|;::::::;:-、:! 'i::::', i::::::';:::|,r'''' `ヾ\ r''i;;;;;;`ヾ、 ';| '、/ ,. ! |:::::! .|::;::::'、|. r'i;;ヽ, .r';;;;;;;;;;! i ! iソ,ノ .!:::::i i;::';:::::'、.| 'q;;;ヽ. '、;;;o;リ ' ,.ィ. !:::::| !:/、::::'、'、ヾ;;;リ , ''"゙ ,リ' |::::::! お茶でも飲んで休憩しよ " \!、` ''" ヽ ! |::::::i |::'、 -‐''フ , i |:::::::! |:::::`i''-、、,_ .`" .,.r'" ', |:::::::| |:::::::i ``''、‐'" .',,,_ |::::::::! .!:::::::', ,,,..ゝ ,,.-‐''" i. |::::::::| .';::::::::'、 ,,.r''7i、__,,,,..-─''" _,,`'''ァ::::::| '、:;;:-'/ _,.-‐''" !:::::::| ,.-''7 / ,.r'" _,,.-'''"`、:::| / / /'`''ー''-、、,,、,,_,,/ ,,.r''" ';::|
俺様を超える兵はおらんのかのぅ。 どしどしかかってこい
132 :
初代Cマスター(1) :03/05/29 23:17
∧_∧ < `ш´> お前らの感じている感情は精神疾患の一種だ。 _φ___⊂) しずめる方法は俺が知っている。どしどしかかってこい。 /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
>129 配列はどうよ。
134 :
初代Cマスター(1) :03/05/29 23:20
∧_∧
< `ш´>
>>133 _φ___⊂) それは俺の間違いだな。素直に謝罪しよう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
135 :
初心者プログラマー :03/05/29 23:22
こんばんわ。最近プログラムを書いてはいるのですが、無駄なところがないか添削していただけないでしょうか??
136 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/29 23:22
∧_∧
< `ш´>
>>135 俺は2週間でCをマスターした男だ。
_φ___⊂) 何でも聞いてみろ。どしどしかかって来い。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
137 :
初心者プログラマー :03/05/29 23:25
ここにプログラムをのせてよろしいでしょうか?プログラムというのは冷凍肉を高温状態に入れたときの熱の変化を数値計算するといったものです。
138 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/29 23:29
∧_∧ < `ш´> お前の問題領域について詳しくはないが、 _φ___⊂) Cマスターとして出来る限りアドバイスしよう。どしどしアップしてこい。 /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | また俺を超える奴が現れた場合即2代目Cマスター就任だ。どしどし挑戦してこい。 | 流鬱百円 |/
139 :
初心者プログラマー :03/05/29 23:39
/* 2次元熱伝導方程式 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <conio.h> /* 空間刻み数 */ #define XMAX 100 #define YMAX 100 /* 代表長さL */ #define LX 0.15//[m] #define LY 0.15//[m] /* 壁面無次元温度 */ #define Hf 1.0 /* 熱源温度 */ #define TH 120.0
140 :
初心者プログラマー :03/05/29 23:39
/* 壁面温度 */ #define TL 5.0 /* 時間刻み数 */ #define KMAX 1.0 /* 計算時間tMAX */ #define tMAX 1.0//[s] /* 物性値 */ #define r 0.7 /* 熱伝導率λ[W/(m*K)] */ #define h 200.0 /* 熱伝達率h[W/(m^2*K)] */ #define a 0.00000017 /* 温度伝達率α[m^2/s] */ /* 収束条件 */ #define EPS 1e-5 main() {
141 :
初心者プログラマー :03/05/29 23:40
/* プログラム中で使用する変数の型宣言 */ FILE *fptr; char fna[14]; int i, j, k; double x, y, dt, dx, dy; double T[XMAX+1][YMAX+1], H[XMAX+1][YMAX+1], new_H[XMAX+1][YMAX+1]; double dev, ave_dev; /* dt, dx 等を設定 */ dt = tMAX / KMAX; dx = LX / XMAX; dy = LY / YMAX; printf( "Hf = %lf, h = %lf[W/(m^2*K)], a = %.8f[m^2/s], r = %lf[W/(m*K)]\n", Hf, h, a, r); printf( "dt = %lf[s], dx = %lf[m], dy = %lf[m]\n", dt,dx,dy); printf("hit return key"); getch(); printf( "\n" ); /* 結果を出力するファイルの作成 */ printf( "? ファイル名 = " ); scanf( "%s", fna ); fptr = fopen(fna, "w" ); if( fptr == NULL ) { printf( "エラー : ファイルがオープンできない\n" ); exit(-1); }
142 :
初心者プログラマー :03/05/29 23:41
/* 初期条件 */ for( i = 0; i <= XMAX; i++ ) { for( j = 0; j <= YMAX; j++ ) { H[i][j] = 0.0; } } /* 時間変化 */ k = 1; do { if( k%10 == 0 ) { printf( " k = %d , T[1][1] = %lf\n", k, T[1][1]); printf( " k = %d , T[%d][%d] = %lf\n", k, XMAX/2, YMAX/2, T[XMAX/2][YMAX/2]); }
143 :
初心者プログラマー :03/05/29 23:41
dev = 0.0; ave_dev = 0.0; for( i = 0; i <= XMAX; i++ ) { for( j = 0; j <= YMAX; j++) { if( i == 0 ) { if( j == 0 )//i=0,j=0 { new_H[i][j] = (2*a*dt)*(H[i+1][j]/(dx*dx)+H[i][j+1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dx+1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dx+1.0/dy))*H[i][j]; } else if( j == YMAX )//i=0,j=YMAX { new_H[i][j] = (2.0*a*dt)*(H[i+1][j]/(dx*dx)+H[i][j-1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dx+1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dx+1.0/dy))*H[i][j]; }
144 :
初心者プログラマー :03/05/29 23:45
else//i=0,0<j<YMAX { new_H[i][j] = (a*dt)*(2.0*H[i+1][j]/(dx*dx)+(H[i][j-1]+H[i][j+1])/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dy))*H[i][j]; } } else if( i == XMAX ) { if( j == 0 )//i=XMAX,j=0 { new_H[i][j] = (2.0*a*dt)*(H[i-1][j]/(dx*dx)+H[i][j+1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dx+1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dx+1.0/dy))*H[i][j]; } else if( j == YMAX )//i=XMAX,j=YMAX { new_H[i][j] = (2.0*a*dt)*(H[i-1][j]/(dx*dx)+H[i][j-1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dx+1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dx+1.0/dy))*H[i][j]; } else//i=XMAX,0<j<YMAX { new_H[i][j] = (a*dt)*(2.0*H[i-1][j]/(dx*dx)+(H[i][j-1]+H[i][j+1])/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dy))*H[i][j]; } }
145 :
初心者プログラマー :03/05/29 23:46
else if( j == 0 )//0<i<XMAX,j=0 { new_H[i][j] = (a*dt)*((H[i-1][j]+H[i+1][j])/(dx*dx)+2.0*H[i][j+1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dy))*H[i][j]; } else if( j == YMAX )//0<i<XMAX,j=YMAX { new_H[i][j] = (a*dt)*((H[i-1][j]+H[i+1][j])/(dx*dx)+2.0*H[i][j-1]/(dy*dy)) + (2.0*h*a*dt/r)*(1.0/dy)*Hf + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy))-(2.0*h*a*dt/r)*(1.0/dy))*H[i][j]; } else//0<i<XMAX,0<j<YMAX { new_H[i][j] = (a*dt)*((H[i-1][j]+H[i+1][j])/(dx*dx)+(H[i][j-1]+H[i][j+1])/(dy*dy)) + (1.0-2.0*a*dt*(1.0/(dx*dx)+1.0/(dy*dy)))*H[i][j]; }
146 :
初心者プログラマー :03/05/29 23:46
//計算結果が前の時間の結果より小さいとき表示 if(new_H[i][j] < H[i][j]){ printf(" H[%d][%d]=%lf,H[%d][%d]=%lf,H[%d][%d]=%lf,H[%d][%d]=%lf,H[%d][%d]=%lf\n",i-1,j,H[i-1][j],i+1,j,H[i+1][j],i,j-1,H[i][j-1],i,j+1,H[i][j+1],i,j,H[i][j]); printf( "new_H[%d][%d] = %lf\n",i,j,new_H[i][j]); T[i][j] = TL + ( TH - TL ) * new_H[i][j]; x = i * dx; y = j * dy; printf( " k = %d, (%lf , %lf) T = %.5f\n", k, x, y, T[i][j]); printf("hit return key"); getch(); printf( "\n" ); } } }
147 :
初心者プログラマー :03/05/29 23:47
//計算結果を次の計算に持ち越し for( j = 0; j <= YMAX; j++ ) { for( i = 0; i <= XMAX; i++ ) { H[i][j] = new_H[i][j]; T[i][j] = TL + ( TH - TL ) * H[i][j]; } } k++; } while( T[XMAX/2][YMAX/2] < 60.0 );//収束条件(中心温度が60度を越える) printf(" k = %d, %d 時間 %d 分 %d 秒でT[%d][%d] = %.5f\n", k, k/3600, (k%3600)/60, (k%3600)%60, XMAX/2, YMAX/2, T[XMAX/2][YMAX/2]); printf("hit return key"); getch(); printf( "\n" );
148 :
初心者プログラマー :03/05/29 23:47
/* 温度表示 */ fprintf( fptr, "x\ty\tT\n" ); for( j = 0; j <= YMAX; j++) { for( i = 0; i <= XMAX; i++ ) { x = i * dx; y = j * dy; //printf( " (%lf , %lf) T = %.5f\n", x, y, T[i][j]); fprintf( fptr, "%lf\t%lf\t%.5f\n", x, y, T[i][j]); } fprintf( fptr, "\n" ); } fclose(fptr); exit(0); }
149 :
初心者プログラマー :03/05/29 23:49
以上です。どこか省略なり、効率よくできるようでしたらぜひ添削お願いします。
ビクッ. ∧ ∧ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ Σ(゚Д゚;≡;゚д゚) < うおっ、なんかすげえ所に迷い込んじまったぞ、ゴルァ! ./ つ つ \______________________ 〜(_⌒ヽ ドキドキ )ノ `Jззз
#include <stdio.h> main(){return(!printf("がんばってください。\n"));}
#include <stdio.h> main(){return(!printf("2chはタブが無効になるよ\n"));}
153 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/29 23:58
∧_∧
< `ш´>
>>149 ボスが来たのでレスが遅れてしまった。
_φ___⊂) これから切削していくから安心しろ。気楽にかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
154 :
初心者プログラマー :03/05/29 23:59
よろしくお願いします。
155 :
初心者プログラマー :03/05/30 00:15
156 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 00:18
∧_∧
< `ш´>
>>155 まぁそう焦るな。
_φ___⊂) まず対象となるデータとそれに対する操作を抽象化して整理していこう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
データの操作はともかく、これでどれくらいの精度が出るんだ?
∧_∧ < `ш´> 対象となるデータはお前も理解していると思うが、XMAX*YMAXの2次元配列だ。 _φ___⊂) プログラムはその配列を操作するコードが大半を占めているしな。 /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
159 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 00:32
∧_∧
< `ш´>
>>157 doubleの精度の前にプログラム構造から切削していこうと思うのだがどうだろうか。
_φ___⊂) まさかこんなマジネタが来るとは思わず困惑している今日此頃。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
160 :
初心者プログラマー :03/05/30 00:34
詳しいことはよくわかってないんです。すいません。
∧_∧
< `ш´>
>>160 大丈夫だ。これからコードをほぐしていけば、お前にもわかるようになるだろう。
_φ___⊂) この件は急ぎの用か? そうでなければ明日以降に何日かかけてじっくり進めて行きたいのだが。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
つか、漏れの頭の中ではメンテしなくないソースの一つになって しまってるんですが。
163 :
初心者プログラマー :03/05/30 00:44
急ぎなんです。明日の夕方5時までなんです。
>>163 でさ、2次元熱伝導とやらの詳細は提示してくれんのか?
これ勉強したいなあ・・・もう遅いかな? 中学校のときやったことあるけど、そのときは全くわからなかった。 これ勉強したいなら、どこの学校に行けば良いですか? アビバとか?おしえてください
166 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 00:54
∧_∧
< `ш´>
>>162 仕事なら発狂しているだろうな
_φ___⊂)
>>163 何故だ? コードの長さから察するに、大学のレポート提出?
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
167 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 00:56
∧_∧
< `ш´>
>>164 俺は2次元熱伝導なんて知らんぞ
_φ___⊂)
>>165 まず「これ」を明確にして戴こう。ハッキリかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
ごめんなさい、これ とは、C言語です。 なにもわからない初心者です。 アビバでおしえてくれますか? だれかおしえてください
170 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:08
∧_∧
< `ш´>
>>168 C言語を理解したいという意欲には応えたいのだが、点数を上げたいだけならスルーしておこう。
_φ___⊂)
>>169 アビバでは教えてくれないだろう。俺にかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
精度はともかく、数式をまとめることはできそうだなぁ。
1さん、まずどうしたらいいでしょうか? パソコンを買うべきでしょうか?
んじゃ、ディレクトリ内のファイル名をすべて書き出すプログラム書いて。
174 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:15
∧_∧
< `ш´>
>>172 パソコンを持っていないのに2ちゃんねるにかきもめるとはさすがだな。オマエなら脳内でもC言語を習得可能だろう。続々かかってこい。
_φ___⊂)
>>173 プラットフォームがわからないと何とも言えないな。FindFirstからディレクトリのreadまで多種多様だしな。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
んと、ゲーム作ったりしたいなあ♪
176 :
仕様書無しさん :03/05/30 01:15
if ( P12IN == 1 && P12IN == 1 && P12IN == 1 ) { tm1 |= 0x01; }
今はマンガ喫茶からです。 仕事の合間に携帯から書き込んだりします。 1さん、即レスありがとうございます。
178 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:18
∧_∧
< `ш´>
>>175 次はどんなゲームを作りたいか妄想すると良いだろう。
_φ___⊂)
>>176 組込み系か? ビット0の定義を俺に伝えるところからかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
179 :
仕様書無しさん :03/05/30 01:19
>>173 $ls -lR /*
とめどなく流れるコンソールに見惚れろ。
パソコン買うより先に妄想ですか?
>>173 勉強しましょう、スレなのに依頼しているヤシ。
ちょっと古いレス #include <stdio.h> #include <string.h> main() { char b[33] = ""; int digit; long now; long ans; while (1) { now = 1L; ans = 0L; printf("最高31桁までの2進数を入力してください。\n"); gets(b); if (b[0] == '\0') { break; } for (digit = strlen(b) - 1; digit >= 0; digit--) { if (b[digit] != '0' && b[digit] != '1') { ans = -1; break; } ans += (b[digit] - '0') * now; now *= 2; } if (ans < 0) { printf("0または1以外の数はエラーです。\n"); } else { printf("10進数の答えは%ldです。\n", ans); } } return (0); }
183 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:22
∧_∧
< `ш´>
>>175 順序はどちらでもよい。妄想を暴走させ意欲を掻き立てれば
_φ___⊂) そのネカフェのPCでC言語を修得することも不可能ではないだろう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
そうですね、でも何かのソフトが必要なんでしょうか? ぐぐってみますけど、もう仕事に行く時間なので、また明日きます。 おじゃましました。
185 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:25
∧_∧
< `ш´>
>>179 ,181 二代目マスターになってくれんか?
_φ___⊂)
>>182 そのコードをどうすればいいのか挑戦的にかかってこい
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
>>182 > char b[33] = "";
そうか。初っ端から切なくなるソースだな。
187 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 01:26
∧_∧
< `ш´>
>>184 マ板だからこそできるこの微妙な質問スレを
_φ___⊂) 多いに活かして戴きたい。適当にかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
188 :
仕様書無しさん :03/05/30 01:27
超先生、数学教えてください
1さんありがとう! またくるね。いってきます♪
∧_∧
< `ш´>
>>186 切削すべきだろうか?
_φ___⊂)
>>188 俺はCマスターであってマッセマティクスマスターではない。数学板に行くと良いだろう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
>>185 それは辞退するがとりあえず眠りたまえ。
∧_∧
< `ш´>
>>191 明日も仕事がんがりましょう。気が変わったらいつでもかかってこい。
_φ___⊂)
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
内容: ,,..-''''":::::::::::::::::``''''-、 ,.r''"::''" ̄``''''-、‐''''ー-、::::`>‐''"":ヽ、 /::::::::::::::::::::::::::::::::::::\::::::::`Y/::i::!::::r'"::', ,r':::::::::::::::::::::::::::::::、:::::::::::::::\::::::|:i::::!:;::/:::::::::! ./:::;::ヽ:::::\::::ヾ;::::::::\::::\:::::`、::ゞ、;::::i'::::;;:ノ i:::::i::::|''\`、\::\_;;;;;;;;\:::`;:::::::i;:::::::`'''''「、::::', |:::::|::::|. ヽ;\''"\`ヾ、;|_\::ト、::|;::::::;:-、:! 'i::::', i::::::';:::|,r'''' `ヾ\ r''i;;;;;;`ヾ、 ';| '、/ ,. ! |:::::! .|::;::::'、|. r'i;;ヽ, .r';;;;;;;;;;! i ! iソ,ノ .!:::::i i;::';:::::'、.| 'q;;;ヽ. '、;;;o;リ ' ,.ィ. !:::::| !:/、::::'、'、ヾ;;;リ , ''"゙ ,リ' |::::::! 1(初代Cマスター) ◆eCEWESD2Lo " \!、` ''" ヽ ! |::::::i がんがれ! |::'、 -‐''フ , i |:::::::! |:::::`i''-、、,_ .`" .,.r'" ', |:::::::| |:::::::i ``''、‐'" .',,,_ |::::::::! .!:::::::', ,,,..ゝ ,,.-‐''" i. |::::::::| .';::::::::'、 ,,.r''7i、__,,,,..-─''" _,,`'''ァ::::::| '、:;;:-'/ _,.-‐''" !:::::::| ,.-''7 / ,.r'" _,,.-'''"`、:::| / / /'`''ー''-、、,,、,,_,,/ ,,.r''" ';::|
>>174 ぷ。
じゃ、Windowsでいいから書いてみ。
>>182 には仕様的なバグがあるでしょ。
ね、1(初代Cマスター) ◆eCEWESD2Lo さん。
それから、どうせなら 10進⇔2進⇔16進(出来れば8進も) 変換ツールにしてもいいかな、と思いますが。
あと一つ失礼。
>>179 どうせならMS-DOSコマンドdirと同じ結果になるように
して欲しいですね。
サブdirと隠しファイルも出力されるようにして。
じゃんけんゲーム作れよ、早く
199 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/30 14:40
∧_∧ < `ш´> お前らの感じている感情は精神疾患の一種だ。 _φ___⊂) しずめる方法は俺が知っている。どしどしかかってこい。 /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | 俺を超える奴が現れた場合即2代目Cマスター就任だ。どしどし挑戦してこい。 | 流鬱百円 |/
∧_∧
< `ш´>
>>194 ,
>>198 挑戦的だな。良い心がけだ。
_φ___⊂) ただ俺が作るだけではつまらんだろう。
/旦/三/ /| どうだ、俺と勝負せんか?
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
∧_∧
< `ш´>
>>195 サインビットを意識していないのが一番マズイな。
_φ___⊂) 他にもgetsのオーバーラン、入力なしのチェックが甘い等
/旦/三/ /| あるが、まずはlongをunsignedにするところからかかってこい。
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
∧_∧
< `ш´>
>>196 ツールにするならstrtol()を使うが良いか?
_φ___⊂) それともstrtol()の実装例を示すべきか?
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
>>197 lsだけではdirの書式に合わせることは不可能ではないか?
| 流鬱百円 |/ それとも
>>194 のツールの書式をdirに合わせろ、ということか?
1さんこんにちは、今日も漫画喫茶きました。 ぐぐって見ました。何かをダウンロードしないと練習も出来そうにないですね。
∧_∧
< `ш´>
>>203 どしどしかかってこい。
_φ___⊂)
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
【緊急】ちょっと現調いってきてください!
名前: 頭脳土方
E-mail:
[email protected] 内容:
現調にいってくれるひと募集。
5月31〜6月1日 宿泊費、交通費、でます。
もちろん、現調なのでお金払います。(値段は相談)
C++が分かる人。開発室と電話連絡しながら、
コンパイルしたりテストしたり、してください。
メール
[email protected] もまいら、よろしくおねがいします。
んと、Visual Studio 6.0 Service Pack 5とかなんとかいっぱいありますけど どれを使うんでしょうか? 1さんおしえてくださいませ。
∧_∧
< `ш´>
>>206 基本的にどれを使っても良い。
_φ___⊂) 感性で選べ。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | そのネカフェのPCにインスコするのか?
| 流鬱百円 |/
今からネカフェのPCにインスコします。 VCというのはこんなにいっぱいあるのですか・
∧_∧
< `ш´>
>>208 VC++は有料なので
_φ___⊂) 金がないなら止めておいたほうが良いだろう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
できないよう、、、
∧_∧
< `ш´>
>>208 Cの処理系はVC++だけではないから
_φ___⊂) 他のfreeなものを探すと幸せになれるはずだ。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
しくしく。 仕事の時間になってしまったので、いってきます!
∧_∧
< `ш´>
>>212 行ってらっしゃい。
_φ___⊂) 気軽にかかってこい。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
ヽ(゚ω゚)ノヤー
∧_∧ < `ω´ > ヤー _と___つ /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
216 :
1(初代Cマスター) ◆eCEWESD2Lo :03/05/31 00:39
∧_∧ < `ш´> 二週間でCを極めた俺に不可能は無い _φ___⊂) かかってこいヘタレども /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
「宣言」と「定義」の違いを教えてくらはい。
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> void new(void) struct Data{ char name[64]; char address[64]; int tel[64]; char mail[64]; };
main(){ int menunumber; puts("何をしますか?"); puts("以下の中から選択し、番号だけ入力してください。"); puts("1:新規作成"); scanf("%d", &menunumber); switch(menunumber) { case 1: new(); break; } } これがコンパイルできません。 どこが間違っているのでしょうか? main()のとこらへんで syntax error near 'main'とでます。
220 :
仕様書無しさん :03/05/31 13:47
>>219 俺のとこではnewがないって言われるよ。
でnewコメントアウトすると何も言われないで
コンパイルできるようになる。
>>219 void new(void)
↑
こう書かないとダメだろう?
俺の指摘は間違ってるかも知れん。Cなんて忘れたよ。ヽ(゚ω゚)ノヤー
223 :
仕様書無しさん :03/05/31 13:55
windowsプログラム つくるには独習Cと 独習C++どっちから やればいいの? 書いてる人同じだけど.
>>219 > void new(void)
プロトタイプ宣言のつもりなら要セミコロン。
>>220 .221.224
プロトタイプ宣言のところにセミコロンがありませんでした。
それつけたらできました。
どうもありがとうございました。
今研修中なんですけど、
Cが全然できなくて悩んでて、今日家でやってもエラーでて
頭おかしくなりそうだったんですけど
レスいただけて気持ちが少し楽になりました。
ありがとうございました。
226 :
仕様書無しさん :03/05/31 14:48
>223 そのC++本はCの理解を前提としているようなので、 やっぱCからだと思う。
227 :
仕様書無しさん :03/05/31 14:56
言語覚えんのに一ヶ月もかかっちゃだめだろ
自分で作ったnew()関数の中でシステムコールを呼んで writeのなかでO_RDONLYってやってコンパイルしたら O_ODONLY undefinedってなってしまったんですけど、 私が使ってるコンパイラはシステムコールには対応してないのでしょうか? 違うものをインストールしたほうがいいんでしょうか?
writeのなかではなく、openのなかででした
>>228 低水準だろう?
ヘッダに
#include<fcntl.h>
#include<io.h>
#include<sys/type.h>
#include<sys/stat.h>
を忘れてないかチェックしてみ。
でも、低水準ファイル入出力を勉強しても、実務では使わないよ。
なんでも、とあるパソコンスクールの練習問題にはあるそうだけど。
またしても指摘が間違ってるかもしれないから……。
Cなんて忘れたよ。ヽ(゚ω゚)ノヤー
∧_∧
< `ш´>
>>228 エラーメッセージから推測するに、
_φ___⊂) O_RDONLYをO_ODONLYとタイプミスしているのだろう。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | 確認してみろ。
| 流鬱百円 |/
∧_∧
< `ш´>
>>217 実装はコードを生成するが、
_φ___⊂) 宣言はコードを生成しない。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | 宣言とはコンパイラと読み手に対するヒントのようなものなのだ。
| 流鬱百円 |/
ごめん。もしかしたら、 #include<sys/types.h> かもしれない(sが必要かも)。 またWinだから「/」じゃなくて「\」かもしれない。 ああ、俺ってだめだなぁ……。
∧_∧
< `ш´>
>>221 いやお前はやれるかやれないかでいったら
_φ___⊂) やれる方だと俺は思うので2代目になってくれんか?
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
>>232 s/実装/定義/g
| 流鬱百円 |/
>>1 (初代Cマスター) ◆eCEWESD2Lo
ヽ(゚ω゚)ヤダー
>>230 .231.232.233.234
レスありがとうございます。
プロトタイプ宣言をしたらO_RDONLYのところは解決できました。
本当に感謝です!
>>236 >(関数)プロトタイプ宣言したから
じゃなくって、
O_RDONLY の define をしてあるヘッダファイルを include したから、
という理解を汁!
void new(void){ struct Data data; int fd; puts("名前を入力"); printf("名前>"); scanf("%s",data.name); 省略 fd = open("data.c", O_RDONLY, 0x666); open("data.c", O_RDONLY, 0x666); write(fd, data, 100); close(fd); } 以下のように出たのですが、 どうしてですか? 構造体をwriteに使えないのでしょうか? Warning:'data'used before set illegal type combination(param)
>>238 defineですか。ちょっと調べてみます。
ご忠告、ありがとうございます。
非常に勉強になります!
なー、data とやらのアドレスを渡しておけ、 と Cマスターは言うだろうに 1000 ペリカ。
∧_∧
< `ш´>
>>221 data.name→&data.name
_φ___⊂) data→&dataで由
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
>>237 本当に質問が来るとは思ってなかったんだよね正直
| 流鬱百円 |/
∧_∧
< `ш´>
>>243 間違えた鬱…
_φ___⊂) data→&dataだけでで由
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
>>242 ピタリ賞
| 流鬱百円 |/
>243 >本当に質問が来るとは思ってなかったんだよね正直 結構こうしてる時間もバカになりませんからな。 なーんて書いてもなんの説得力もない漏れでした ♥
>>238 #define 元の文字列 置き換える文字列
O_RDONLYを書き、ヘッダファイルをインクルードしたことによって
ヘッダファイルにある処理もしくは文字列が
実現できたって理解でいいですか?
>>246 そです。
この場合は、最初にソース上のO_RDONLYが数字(数値)に置き換わって
それがコンパイルされてるんですよ。
なんでこんなことをしてるのかというと、プログラムを作る人が
具体的な値が何かを意識しないでいいようになってるんですよ。
>>239 scanfは文字列入力用ではないぞ(できないことはないが)。
putsとscanfは互換性あったっけ?
∧_∧ < `ш´> >putsとscanfは互換性あったっけ? _φ___⊂) あるある /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | fgetsでsscanf/手動パースが定石だよな | 流鬱百円 |/
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < 「1(初代Cマスター)◆eCEWESD2Lo」 C言語の経験何年あるんですか? 1週間は嘘でしょう? (,,・Д・) \__________ ミ__ノ
∧_∧
< `ш´>
>>250 >>1 に書いてあるとおり
_φ___⊂) 5/13からCの勉強を始めたわけだが
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | そんなことより(2代目)やらないか?
| 流鬱百円 |/
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < かなり無理。遊び程度でしかやってこなかったし。 (,,・Д・) それに今は「Java」ばかりしててCなんて忘れてる。 ミ__ノ \__________
218,219の続きです。 以下のようなプログラムでコンパイルも実行もできたのですが、 data.cに書き込みされたデータが 文字化けしています。どうしたら直りますか? void new(void){ struct Data data; int fd; puts("名前を入力"); printf("名前>"); scanf("%s",data.name); puts("住所を入力"); printf("住所>"); scanf("%s",data.address); puts("電話番号を入力"); printf("電話番号>"); scanf("%d",&data.tel); puts("メールアドレスを入力"); printf("メールアドレス>"); scanf("%s",data.mail); fd = open("data.c", O_WRONLY, 0x666); open("data.c", O_WRONLY, 0x666); write(fd, &data, 1000); close(fd); }
Data の定義を見てないので知らないが、 scanf("%d",&data.tel); これだけは、正しいと思われる
∧_∧ <(゚ω゚)> _φ___⊂) CASL2勉強する人ー! /旦/三/ /| | ̄ ̄ ̄ ̄ ̄|. | はーい! |. CASL2 |/
わかんないよー!
>>253 Data は
>>218 の定義だよな?
>write(fd, &data, 1000);
これが何をしているか、判っているのか?
struct Data{ char name[64]; char address[64]; int tel[64]; char mail[64]; }; Dataという名前で構造体を宣言し、 writeで構造体の中身であるdataを 最初から1000バイト目まで fdで示されるdata.cというファイルに書き込むというつもりで書きました。 名前と住所は正常に記載されていたのですが 電話番号以降、変な文字がたくさん現れています。
なんで1000バイトなのか、って以前に、 >int tel[64]; バイナリのままファイルに書いてテキストとして表示したら そりゃマトモに表示できるわけがない。 つか、まず入門書の演習問題でもやってみちゃどうだ? ちょっとあんまりなレベルだ。
会社からもらった本にはバイナリについて書いてないみたいです。 本屋にいってもシステムコールについて書いてある本は難しいやつしかないし、 Cとシステムコールの研修はあわせて約2週間しか受けてないし、 自分も頭が悪いので、レベルが低いんですけど、ごめんなさい。 これはdata.cの中身はバイナリでもコンパイラで ファイルを開くときにテキストで表示されればよいということですか? それから#include <unistd.h>と宣言し、コンパイルしたら can't open:unistd.h:NO such file or directry となるのですが、自分で定義しないといけないのでしょうか? レベルが低い質問なんですけど、明日までに課題を提出しないといけないし、 すごくてんぱっているのでよろしくお願いします。
みすてないでー・・・・。
>>260 その会社は専門はなに?
つまりオープン系か制御系か、汎用系かで言うと。
低水準なんて使わないのに勉強させる理由が分からない(低水準の考え方とか役に立つわけではないと思うし)。
本当に会社の研修なのかなぁ。会社の研修だったら「puts」と「printf」を混同させたりするかなぁ。
「scanf」ではなくて入力はすべて「gets」に統一させると思うし。getsはスペースを読みこむことができる文字列入力用の関数だけど、「atoi」関数を使えば数字も可能だし。
うーん、会社の研修と言うよりかは独学かどこかのスクールのようなきがしてきたなあ。
>>262 旦那、こまかいようだが最近は「gets」じゃなくって「fgets」ですぜ。
はぁ、来月の8日からパソコンがうちにきます。1さんの言うように、無料で使えるのを取ってみます!
はぁ、来月の8日からパソコンがうちにきます。1さんの言うように、無料で使えるのを取ってみます!
266 :
仕様書無しさん :03/06/01 11:52
>>263 ファイルから読み込む場合は「fgets」でしょう?
コンソールへの入力は「gets」じゃなかったっけ?
まずいぞ、俺。完全に忘れている……。
少し書き込み控えよう。そのうち大恥かきそう……。
>>262 本当に会社員ですよ。4月から入社した新社会人です。
かいしゃはNTTドコモから仕事もらっています。
FOMAとかのアプリケーションとか作ってるみたいです。
まだ研修中ということと、自分があまり情報系に興味が無いのに
今の会社にいるため汎用系とかわかりません。
自分の会社はNTTが携帯始めた当初から付き合ってるっていってました。
社長とかは天下ってるみたいですけど、資本関係はありません。
会社の研修では基礎は自分でやってけということで
応用的なことしか講義してもらえません。
自分が今まであまり家で勉強してないのもあるんですけど
講義のレベルが高くてそんな基本的なこともわかんないんです。
今まで研修ではマナー研修、JAVA、UML、C、UNIX、システムコールと
いうふうにやってきました。
見捨てないでください・・・。
たとえコンソール,つか標準入力からの読みこみでもgetsは使っちゃだめですよ。 普通stdinからのfgetsでは。
>>269 わかったわかった。
つまりこういうことね。
#include<stdio.h>
main()
{
char box[80];
printf("文字を入力してください\n");
gets(box);
printf("入力された文字は次のとおりです\n");
printf(box);
}
「gets」だと配列のオーバーランをチェックできない。
そのために次のレスのようにするわけだろう。
#include<stdio.h> #include<string.h> main() { char box[80]; int i; printf("文字を入力してください\n"); fgets(box,80,stdin); i=strlen(box)-1; if(box[i] == '\n') box[i] = '\0'; printf("入力された文字は次のとおりです\n"); printf(box); } こういうことだろう?
∧_∧ < `ш´> >qqq _φ___⊂) 俺が手伝ってやろうか? /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | まずどんな風に化けているのか俺に教えてみろ | 流鬱百円 |/
>>272 ありがとうございます!!!
以下、data.cをひらき、多少削ってペーストしました。
電話番号だけ正常に表示されていません。
それから電話番号の後にわけのわからない文字が出てきます。
お手数おかけしますが、よろしくお願いします。
実行では
名前のところに Yamamoto
住所に Tokyo
電話番号に 080
アドレスに a@a
と入力しました。
Yamamoto Tokyo
P
a@a ; f 。・ ・ ・
再度data.cの内容をペーストします Yamamoto Tokyo P a@a ; f 。・ ・ ・ ・ xチ j ュ
変な文字がもっとあるのになんかすべて表示されないようです。
>電話番号だけ正常に表示されていません。 >それから電話番号の後にわけのわからない文字が出てきます。 と書きましたが、アドレスのあとにわけのわからない文字が出てきます、 でした。ちなみに電話番号はPと表示されてるみたいです。 書き込み多くてすみません。
∧_∧ < `ш´> まずdata.telは配列である必要がないから※修正1を施せ _φ___⊂) 次に書き込んでいるデータが分かりやすくなるように※修正2を施せ /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | バイナリエディタ持ってるか? | 流鬱百円 |/ 修正1. int tel[64]; ↑これを ↓これに修正 int tel; 修正2. puts("名前を入力"); の前の行に memset(&data, 0, sizeof(data)); を追加
初代Cマスター・・・・いい人ッスネ!
修正1. int tel[64];をint tel;にしましたが、先ほどと変わりませんでした。 修正2 memset(&data, 0, sizeof(data));を追加したら、コンパイルの所で Warning:function 'memset' undefined --- assumed to be int とでてしまいました。 バイナリエディタは持っていません。 ところでdata.cに書き込まれるデータは、バイナリなのですか? 普通のエディタではdata.cが 文字化けして表示されるのが普通なのでしょうか?
∧_∧
< `ш´>
>>279 UNIXなら'$ man memset'などとすればどのファイルをインクルードすれば
_φ___⊂) 良いか分かるだろう。以後活用せよ。VC++ならMSDNでな。
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | #include <string.h>を追加してみろ
| 流鬱百円 |/
#include <string.h>をいれましたが、以前とかわらずです
じゃあ#include <stdlib.h> >ところでdata.cに書き込まれるデータは、バイナリなのですか? この辺はバイナリエディタで開いて 目で見てみればすぐ分かるから ちょっと落ち着いて待ってろ。
#include <stdlib.h>でも以前とかわらずです。
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < 「1(初代Cマスター)◆eCEWESD2Lo」 がんばってください。本当は経験者なんだろうから。 (,,・Д・) \__________ ミ__ノ
じゃあ#include <memory.h> かな。すまんね。
も、もしかしてコンパイルは通っているノカー? 動作が変わらないという意図で 「以前と変わらずです」 と仰っておるのですか?
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < ファイルに書き込まれたデータはエディタで見ると文字化けしてるのが普通だぞ。 (,,・Д・) 文字化けしないのは「fprintf」で書き込んだ場合のみ。 ミ__ノ \__________
∧_∧
< `ш´>
>>280 バイナリエディタがないなら
_φ___⊂) '$ hexdump -C data.c' としてダンプしてみろ
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| | 落ち着くべきは俺の方だったか…
| 流鬱百円 |/
今までファイルに書き込まれたデータを エディタで見て、文字化けしてました。 すみません、バイナリで書かれるってしらなくて・・・。 本当にごめんなさい。 1(初代Cマスター)、仕様書無しさん どうもありがとうございました!!!
∧_∧ < `ш´> >バイナリで書かれるってしらなくて・・・。 _φ___⊂) おいおい、そんな理解の仕方で終了にしてしまって良いのか… /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | 俺の説明が悪かったな。すまんな。 | 流鬱百円 |/
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < 1(初代Cマスター) ◆eCEWESD2Lo さん。 (,,・Д・) ついに本性現しましたね。ダンプなんて素人は知らないもんねー。 ミ__ノ \__________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < さて、このスレを乗っ取らせていただくぞ。 (,,・Д・) \__________ ミ__ノ
ヽ,,.'" , ゙、 :::::::;:::',i゙i、,_ ,.' , , ., , .:,.' .: ',.. 、 ゙、 . :/::::::}r'、 `゙ ,' .,' .: ,' ,,、-/‐,ッ、:::/..:;: .. l l;:..;. ',. ', ./:: :::/::. ヽ i l .::l:,、r'゙ ::,.'i../,'.:::,'i.:::;,'. .:,':''7i'it、l!:. , i,. ! '.::::::/:l::::::.. l. l. ::;r':i l .:::,' l l:::,' !::,',' .::;': /,'/ !:l'l;::. i ,' l:. i !!,' ::::::/::!:',::::::::::l. ::',/i l:|. l::;;!、ェ、,,l:i l::,'.!:..::,,'::/ / l:i l:゙:.,' /:. l:: | j.l' ::::,'!::::'::゙、:::::::! ::::i、l. 'l,,;ン',,、ぃ,゙ヾ l:l l::::/,ソ.r''"ヾl, l:::/ン゙l:::: l::: i /l' :::j ',:::::::::::::::::!. ! :::::l、゙,,ilr' ,il゙ _,,!i. 'l l::/ ' ,r゙゙'i;.ヾlン''/: l:::: ,'l:: ,'j ./ l ::i. ゙、::::::::r''''!. ! :::::!'''゙li. l;:゙'illlr;::! ゙ i:!、r:'l. ;シ./::: .!:,r!,':;/,',.'l j :l ゙、:::i゙''、゙!. ! ::::|. ゙. 'r,ン::::ソ l;: ''゙:;' ' ,':::: .r' /ツ::ジ j j :|. ヾ゙、 '、i. ! ::::! ''‐゙゙'='゙- . ゞ-'',、 i:::::: j '"!:i:: j .,' :l `゙' 、', i :;::l r‐‐‐-,.  ̄` .j:::: ,' l:,i: ,' / ';! ',.i. ';:!,_ | / , ':::: ,' ,ソ!: ,'./ ,ヽ ゙、, ';ヘ!ヽ、 ',. ,.' ,、‐l:l::::: / /.,' ,'/ :! ',.',',l,_ ゙'ヽ 、,,_. ゙'" ,、 ‐'" ,',i::: / / ,.シ ':', '、',゙、゙''ー- 、、、、゙゙i,゙''''" /'i::/ /,.' ヾ、 ,,、 - '゙::ヾ,ヽ:...:...:...:...:...:{ ,'/ ,ン゙ ,、- '"゙~ヽ、:...:...:..::゙、:...:...:...:...:...:.lヽ、 _ / . 、r''ヽ、 ヽ:...:...:...:...:...:...:...:...:...:...:.゙j ゙''‐ 、 '
│ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄│ │ まったりしてるね │ │__________│ ∧∧ ‖ ( ・∀・)‖ / づΦ
∧∧ ∧∧l||l /⌒ヽ/⌒ヽ) ダレモコネー……… 〜(___〜(___) ''" ""''"" "'゙''` '゙ ゙゚' ''' '' ''' ゚` ゙ ゚ ゙''`
∧_∧ < `ш´> 元々dat落ちまっしぐらだったスレだからな。 _φ___⊂) レスは期待すんな /旦/三/ /| | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < 1(初代Cマスター) ◆eCEWESD2Lo さん。 (,,・Д・) どんな開発に携わってるんですか? 漏れはweb系の開発なんですけど。 ミ__ノ \__________
>>290 どういう理解をすればよいのでしょうか?
∧_∧
< `ш´>
>>297 >>11 を参照しる。
_φ___⊂)
/旦/三/ /|
>>298 | ̄ ̄ ̄ ̄ ̄| | n = 3とc = '3'の違いと
| 流鬱百円 |/ テキストモード・バイナリモードの違いをごっちゃにしてないか?
>>298 Data の中身を見た
それなら
>>254 でオレが言ったことは正反対で、
scanf("%d",&data.tel);
だけは期待通りに動作しない
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧η∧ < 300取れなかったよー。 (,,・Д・) やっぱり素人じゃなかったわけですか。 ミ__ノ \__________
なんか可哀想になってきた…突き放したみたいな書き方して悪かった >>qqq write() はメモリ内部のデータをそのまま書くだけだから、 1. テキストエディタで見られるようにするなら文字列に“変換”しないといけない。 2. Data のメンバ (構造体の定義で並べた項目) のうち、文字列 (char [64]) の ものは“変換”しなくてもいいが、たとえば入力が10バイトしかなかった場合に 10+1 ('\0' の分) を除いた残りの53バイトにはでたらめなデータ (初期化して ないから) が入っているので、やはり文字化けする。 なので、ここは open/write/close ではなく fopen/fprintf/fclose を使う。 判らんかったらまた書き込んで。
うちの会社も新人に無茶させてる。 最初qqq見たとき、うちの香具師か?ってオモタ
もう全くの初心者で申し訳ないんですが ソースファイルを保存したディレクトリに移動する とあるんですがどうすればいいんですか? winMEでBorland C++Compiler 5.5を使ってます。
>>304 DOSプロンプトの画面で
cd..で一つ上のディレクトリへ
cd [フォルダ名]で一つ下のディレクトリへ
cd [絶対パス]で好きなところへジャンプ
これでわかる?
>>305 すいません、こんなにレスが早いとは思ってませんでした。
絶対パスとは何ですか?
C:\WINDOWS\HELP\TOUR ↑みたいにドライブ名から初めて上から順にすべての ディレクトリを連結して書くこと。
ソースファイルがメモ帳に書いたやつの場合なら、 ファイルを開くって所のファイル名でいいんですか?
なんかパラメータが多すぎます. - Documents\TEST.C.txt] と言われたんですが・・・
>>304 C:\My Documents みたいに空白が入ってるディレクトリで作業するといろいろ
めんどくさいですから,それ用に英字名だけのディレクトリ作ってそちらで作業した方
が楽ですよ。
テキストでファイルに出力したいなら電話番号も文字列にしちゃえば?
>>300 漏れもそう思う。
あの・・・昨日独習C買ったばっかりでして それで練習問題のホントの最初も出来ない状態でして・・・ すいませんディレクトリはどうやって作ればいいんですか?
>>304 エクスプローラで作れますが…Windowsの基本的なファイル操作はご存知なのでしょうか。
2年半ほどインターネットで遊んでいた程度です。 ほぼわからないです。
突拍子もないこと抜かすネコのせいでスレが止まってしまったな。
317 :
よく解るDOSコマンド辞典ディレクトリ編 :03/06/01 23:28
ディレクトリ・ファイル名がスペースを含む場合、 cd "d:\Program Files\" のようにダブルクォートで囲み、一連の文字列であることを 明確にする必要があるよ! スペースは多くのシェル( コマンドプロンプト含む ) にとって意味があるからね! または、 cd d:\Program\ Files\ のように、バックスラッシュでスペースの意味を打ち消してやる方法もあるよ! でも面倒くさいから、普通はドライブ直下にディレクトリを作成するか、 subst を使って任意のディレクトリ以下をドライブとしてマウントするよ! subst k: "D:\Documents and Settings\" これで D:\Documents and settings 以下に、Kドライブとしてアクセス出来るようになるよ! Win2k/XP などのOSで cmd を使っている場合、補完機能もイケてるよ! パスを途中まで入力したらTABキーを押してみよう! ディレクトリ操作あれこれ:(これらの殆どUNIXと共通か、共通に出来るよ) cd dirname ディレクトリ移動 mkdir dirname ディレクトリ作成 rmdir dirname ディレクトリ削除 dir dirname ディレクトリ内閲覧 ちなみに ..\ と .\ は特殊なディレクトリ名で、 ..\ はカレントディレクトリの一つ上のディレクトリを示し、 .\ はカレントディレクトリを示しているよ! パス名は、DOS/Windowsでは大文字小文字を区別しないけど UNIX系ではするので注意してね!
∧_∧ < `ш´> 1 スレッドストッパーは俺だ _φ___⊂) 只でさえ人が少ないんだから /旦/三/ /| 煽るのは俺だけにしとけ | ̄ ̄ ̄ ̄ ̄| | | 流鬱百円 |/
質問です。 標準入力から読み込むときにfgets使うと最後に\nが付くじゃないですか 関数作って毎回呼ぶっていうやりかたが一般的なんですか?
320 :
仕様書無しさん :03/06/02 00:21
C言語使用のカイシャに入るんだけども どの程度のレベルを要求されるんですか?
>>320 まあ、一般的には詳細設計か製造(プログラミング)です。
そして、検査が出来るレベルは必ず要求されます。絶対不可欠。
なぜなら、(ゲームソフトでない場合)
貴方の給料はユーザーさん(企業)が支払うお金から賄われるからです。
これは忘れないように。
それから、C言語に関しては、複雑なプログラミングを組めると自負していると、
かえって保守の面(検査のバグ対応や不具合対応)で失敗することがあります。
基本さえしっかり抑えておれば良いのです。裏技など役に立たない場合が多い。
先の例では、
struct Data_t {
char name[64];
char address[64];
int tel;
char mail[64];
} ;
struct Data_t data;
を利用してデータの転送・参照を行う場合、fgetsとかの技を使ってきっちり出し入れする事よりも
まず先に、data内を初期化しておくことが大切です。
どんなにC言語に精通していても、一度は必ず挫折する壁があります。
その壁を乗り切れるように、頑張って下さい。
>>319 私はfgetsの直後,行末の\nを落とす(自前の)関数にほうりこむ,というのが常套句の
ようになっています。perlだとwhile(<IN>){chop; ...}とするようなものですね。1個所しかないな
ら267さんが271に書いた(みたいな)方法をとってもいいのですが。
上手く動作しません。 チェックお願いします…。 #include <stdio.h> main() { float x,y,z; printf("割られる数 >"); scanf("%f",&x); printf("割る数 >"); scanf("%f",&y); if(y){ z=x/y; printf("%f",&z); }else{ printf("割る数は0以外である必要があります。"); } return 0; }
printfの中の&は不要だが?
>>324 ぉぉ、本当だ…!
気付いてしまえばくだらないミスですねえ。
正常に動かせました。
ありがとうございます!
住所データを入力してファイルに記録するプログラム作ったつもりなんですが 上手く動かないです。 どこに問題があるかご教授願いします。 #include <stdio.h> #include <string.h> struct jyusyo{ char address[50]; char name[20]; char tel[15]; int age; }; int get_keybord(struct jyusyo *); void put_disk(struct jyusyo *, int,FILE *);
int main(void) { struct jyusyo js_s[10]; int cnt; char f_name[20]; FILE *fp; cnt = get_keybord(js_s); do{ printf("ファイル名>>"); fgets(f_name,sizeof(f_name),stdin); }while(!strlen(f_name)); fp = fopen(f_name,"w"); put_disk(js_s, cnt,fp); return 0; }
int get_keybord(struct jyusyo *jp ) { int i = 0; char buff[5]; do{ printf("住所>>"); fgets(jp->address,sizeof(jp->address),stdin); printf("名前>>"); fgets(jp->name,sizeof(jp->name),stdin); printf("電話>>"); fgets(jp->tel,sizeof(jp->tel),stdin); printf("年齢>>"); fgets(buff,sizeof(buff),stdin); sscanf(buff,"%d",&jp->age); i++; }while((strlen((jp++)->address)) == 0); printf("チェック"); return i-1; } void put_disk(struct jyusyo *jsp, int num,FILE *f_p) { int i; for(i = 0;i < num; i++){ fprintf(f_p,"%s\n",jsp->address); fprintf(f_p,"%s\n",jsp->name); fprintf(f_p,"%s\n",jsp->tel); fprintf(f_p,"%d\n",jsp->age); } fclose(f_p); }
put_disk関数の中で同じものをnum回書き出してる様だが、気のせいか?
ほんとだ! でもjspをインクリメントするようにしたのを実行してもまだダメダメっす。 他にもいといろおかしいトコがあるっぽいです。
fgetsで取り込んだ後、改行文字消したか?
おー、whileの継続条件のとこがでたらめですね。 調べてみたらstrlenは改行文字も数えて返すらしいのでwhileを 1のとき偽となるようにしたらget_keybordは期待通りに動くみたいっす! でもファイル名を入力するトコでエラーが・・・ ダメ過ぎる・・・
fgetsで取ってきた文字列をファイルネームにすると何故か上手く行きません。 getsでとってきたらきちんと出きるのですがgetsはサイズ指定できないので使うなとかいわれますし・・・ どなたか原因とかわかる方いらっしゃいませんかーー
>>333 fgetsは改行を消さない、getsは消す。
Cの「仕様」です。
>>317 うわぁ・・・どうも、どうも。
これでやっと進めます。
有難うございました。
何度も申し訳ないです C:WINDOWS>cd "C:\My Documents\TEST.C.txt" で、 ディレクトリの指定が正しくありません となるんですが・・・ 指定先のメモ帳の内容はですね #include <stdio.h> int main(void) { printf("これはCの短いプログラムです"); return 0; } となってます何がいけないんでしょうか。
まず初めに目的はなんだ? メモ帳でtestc.txtを開くのか? cdはディレクトリ移動のコマンドだ。ファイル指定しても意味無し。
>cd "C:\My Documents\TEST.C.txt" これはファイルのフルパスであってディレクトリのフルパスではないという 至極当然な罠
#include <stdio.h> int main(void) { printf("これはCの短いプログラムです"); return 0; } このプログラムを保存し、コンパイルして実行したいんですが・・・。 その手順なのか独習Cの例1.2に メモ帳などのテキストエディタでプログラム用の ファイルを作成し保存、DOSのプロンプトを開いて ※ソースファイルを保存したディレクトリに移動して 次のコマンドを入力 bcc32 test.c これでプログラムを実行できます。 次のコマンドを入力してください test.exe この米印の行が前にも聞いたんですけどさっぱりでして どうすればいいんでしょう?
ソースファイルのあるディレクトリに移動しろ という簡単な指示が理解できないなら、パソコンの使い方から 勉強しないとなんないんじゃないの ソースファイルが何かわからないんじゃあるめぇ?
>>339 プロンプトの操作出来ないならプログラミング以前の問題だぞ…。
先にそっちの操作学ばねば。
if (isprint(c)) これってどういう事ですかー? いまいちifの条件式の書き方がぴんとこないです。 isprintが真なら実行するですよね? isprintが真のときと偽のときの区別はどーやってつけてるの??
343 :
仕様書無しさん :03/06/03 08:08
>>342 elseやelse if書かないなら偽のとき、下に抜けるだけ。書くと、そっちに制御が逝くわけよ。
if (!jsprint(c))なんてやることもあるよ。
344 :
((≡ ̄♀ ̄≡)) :03/06/03 08:16
345 :
仕様書無しさん :03/06/03 09:58
>>342 真 →ゼロ以外
偽 →ゼロ
だから、isprint(c)が0以外を返せば真だと判断される
C言語の勉強をしている人のためのスレと思ったが、 その*C言語の勉強をしている*基準が未だに分からないスレですね?
>>342 「isprint」
<処理概要>
指定された文字の文字種別が、表示可能文字かどうかを判定する。
<引数>
判定する文字
<戻り値>
判定結果を返す
[値の意味]
==0 : 引数で指定された文字が非表示可能文字
!=0 : 引数で指定された文字が表示可能文字
#include <stdlib.h> #include <math.h> #define CX 320 #define CY 200 #define LO 100 #define SX CX #define SY CY+LO intdq=30; doubledl=0.68; main(int argc,char *argv[]){ if(argc>1)dq=atoi(argv[1]); if(argc>2)dl=atof(argv[2]); gint(); tree((double)LO,90);} tree(double d,int q){ double p=q*3.14159/180; int dx=cos(p)*d,dy=sin(p)*d; if(d<=2)return; move(+dx,+dy,l); tree(d*dl,q+dq); tree(d*dl,q-dq);move(-dx,-dy,0);} move(int dx,int dy,int on){ static int x=0,y=0;static double x0=SX,y0=SY; x+=dx;y-=dy;if(on)gline(x0,y0,x+SX,y+SY); x0=x+SX;y0=y+SY;}
0以外のときは真で0を返せば偽??? これって他の関数でもこの通りなのでしょうか? if (isprint(c) != 0)こうすれば分かりやすいのに if(isprint(c))こうされるとわけわからん!
shortとintどっちも2バイトですよね。 違いってなんすか? どうやって使い分けるのでしょう?
>shortとintどっちも2バイトですよね いいえ,処理系によって違います。
そうなんですか! 処理系によってintとshortのサイズが変わるってことは intとshortのサイズが一緒じゃない事もあるってことですか? サイズが変わるだけでintとshortのサイズ比はやっぱり同一なのでしょうか?
>>349 私にとっては後者の方が読みやすいです。それは慣れ不慣れということで
はなく,if((a>b)!=0)よりもif(a>b)の方が読みやすいのと同じ理由です。
if(...){foo();}else{bar();}は...が真(非0)ならfoo()を,偽(0)ならbar()を実行します。だから
たとえばif(isprint(c) != 0){foo();}else{bar();} だと
cが表示可能→ isprint(c)が非0→isprint(c)!=0が真→if()の()内が非0(真)→foo()実行
となりますが,if(isprint(c)){foo();}else{bar();} だと
cが表示可能→isprint(c)が非0→if()の()内が非0(真)→foo()実行
というように判断が1個少なくなる(というか前者の方が無駄に1つ多い)ので,私に
とっては(あるいは多くのCプログラマにとっては)後者の方が読みやすいのです。
>>352 たとえば私の手元の環境ではintが4バイト,shortが2バイトです。処理系によっては
shortからlongまで全部同じサイズである可能性もあります。intがその計算機にとってもっと
も自然なサイズであり,shortはそれより大きくなく,longはそれより小さくない,ということし
か決まっていません。
関数が0じゃない値を返せば真、0を返せば偽と覚えとけばイイのかな。 0を返すだけじゃ真か偽か判断が出来ないと思っていたのです。 比較するものがあってそれが正しいかどうかで真か偽を判断するしかないと思ってた。
関数が何を返すかというより,ifの判断は0か非0かで行なわれるという方で見た方が いいと思います。ところで,is系の関数(マクロかもしれんけど)がそのように値を返すお かげで,たとえば if(isalpha(c)) ... を if c is alpha(bet), then ... というように読むことがで きます。なれてくるといろんな式がそんな風にそのまま読みくだせるようになりますよ。
>>321 レスありがとうございました。頑張りたいと思います。
ねえねえ 1(初代Cマスター) ◆eCEWESD2Lo タン、
切削って何? 旋盤とか彫刻刀とか使うの?
(ref:
>>153 ,
>>190 ほか)
∧_∧
< `ш´>
>>358 『添削だろヴぉkが』というレスが
_φ___⊂) 200レス後というところが泣けるな
/旦/三/ /|
| ̄ ̄ ̄ ̄ ̄| |
| 流鬱百円 |/
361 :
仕様書無しさん :03/06/04 01:07
>>355 == も != も、真偽値を返す演算子だということを念頭に置こう
if() のカッコの中は式なので、式であれば何でも書ける
if( 0 ) や if( 1 ) というのもアリ
if( a = b ) とした場合、 代入演算子の戻り値がnon-zeroの場合、真になる
ただし、NULLは0ではないので、
if( fp = fopen( "foobar.txt", "r" ) ) とはやらないこと
>>361 NULLは0ではないけど,0はNULLに変換されるからその比較はいいんじゃないかな。
文字列配列を1文字づつ出力するさい ポインタをインクリメントして回したときの時間と 配列の添字で回したときの時間を測るのはどするのでしょう?
>>364 それぞれで関数でも作って、プロファイルを取れ。
プロファイルってなんすか?
プロファイルってUNIXだけすか? windowsでやるにはどーするの?
>>368 そんなときのためにマニュアルがあるのです。
コンパイラのヘルプ見たけどのってないっす! コマンドラインオプションで指定するのかと思って探したけど乗ってないような・・・ どなたかー関数のプロファイリング取る方ご教授おねがいしますう
質モんです。 while文はすべてforで書きかえられるときいたのですがほんとでしょうか?
372 :
仕様書無しさん :03/06/04 15:41
whileは処理を無視することができるけど forは最低でも1回は{}を処理してしまうんだったと思う forの前にif gotoってのは反則でしょ
373 :
仕様書無しさん :03/06/04 15:44
お願いします。 1<2<3 は真なのにどうして3>2>1は真ではないのですか?
374 :
仕様書無しさん :03/06/04 15:49
(1<2)<3 -1<3=true と (3>2)>1 -1>1=false
>>374 レスありがとうございます!なるほど、分かりました。
>>374 (1<2)の値は-1じゃなくて1では?
>>372 for(A;B;C){D;}は
{
A;
while(B)
{
D;
C;
}
}
とほぼ等価(D内にcontinueがあってもCが実行されることなどを除いて)ですから,{}内が
実行されるとは限りません。 最低1回は{}内を実行してしまうというのは do{}while(...);と混
同しているのでは?
>>370 我が愛用のLSIC-86試食版コンパイラでは-pでプロファイリングできますが何か?
>>377 漏れもそう思う・・・。
でも>376は>374の説明で納得しちゃってるし…、なんかワケワカラン
>>381 結果的に
1<3 … true
1>1 … false
だからね。偶然にも。
>>381 結果的に
1<3 … true
1>1 … false
だからね。偶然にも。
>>372 ループの本体を必ず一度は実行するのはforじゃなくてdoよん。
>>383 やっぱ(1<2)<3は、-1<3になると解釈するのが正しいんですか?
何故-1に??
387 :
仕様書無しさん :03/06/05 18:23
>>379 LSI C-86のプロファイルって時間じゃなくて呼びだし回数だけのものじゃなかったっけ。
というようにプロファイル機能についてはコンパイラによって差があると思いますので,マニュ
アルに頼るしかないのでは。というわけで詳細きぼー
>>380 >>385 =381 printf("%d\n", 1 < 2); とかやってごらん。-1というのはたぶんBASICか何かと勘
違いしてるんだと思うよ。
>>387 バカだな。
ageると、無能さを知らしめることになるのにな。
>>387 プロジェクトの設定のリンクタブで「プロファイルを行う」をチェックして、
設定を保存後、ビルドし実行ファイルを生成。
後はビルドメニューのプロファイルを選択しる!
※「プログラムデータベースを使用」の設定になっているとプロファイル出来ない事に注意
gprofがGNU Profilerだと思っていた僕チンは炒ってよしでつか?
>>388 ぐは。うっかりしてました。
>>389 なるほど。プロジェクトの設定の方でしたか。ありがとうございます。
とある事情で、特定のファイルの0xFFだけを削除したいのです。 手動でやるにはあまりにデータが大きかったので、プログラムにやらせたいのですが・・・やり方がよく分かりません Cでこういうプログラムを組むにはどうしたら良いのでしょうか 詳しく分かる方お願いします。
1.ファイルをオープンする 2.ファイルを先頭から1バイトずつ読み込んでいく 3.もし、読み込んだバイトが0xFF以外ならファイルに書き出す 4.ファイルの終了まで3を繰り替えす 5.終(・∀・)了 他には、0xFFを長さ0で置換するとか色々と方法はあると思うけど。 つーか、Cでやる理由が(以下略
2のファイルを先頭から1バイトずつ読み込んでいくって具体的にどうやるんですか?
どうして自分で調べようとしないのか、 どうして自分の脳を働かせないのか、 漏れには理解できない。
#include <stdio.h> int main(int argc,char *argv[]){ FILE *read,*write; char cc; if(argc<3) return 0; read = fopen(argv[1],"rb"); write = fopen(argv[2],"wb"); if(read==NULL || write==NULL){ puts("fopen error"); if(read) fclose(read); if(write) fclose(write); return 0; } for(;;){ if((cc=(char)fgetc(read))==EOF){// EOF==0xFF if(feof(read)){ puts("complete"); break; } else if(ferror(read)){ puts("error"); break; } } else fputc(cc,write); } fclose(read);fclose(write); return 0; }
∧η∧ (,,・Д・) ミ__ノ
皆さんに質問です。 入門書を読み終え、大体の文法は分かったのですが、皆さんみたいに自在にプログラムを組めません。(どんなふうにやっていいか具体的な手法が浮かばない…) これから少しずつ簡単なプログラムでならしていこうと思っていますが、オススメのプログラムはありますでしょうか? また、皆さんは入門を終えた後、どのように勉強を進めたのでしょうか?
>>398 配列に格納されているデータのソート、サーチ、入れ替えとか、
文字列を扱う関数(strlenとかstrcpyとか)を自分で作ってみたら?
>>398 簡単なものじゃつまらないからいきなりちゃんと使えるものを作ってみよう!と
いうことを私はやってみました。もちろん完成には至りませんでしたが,全然わからな
いことを調べる方法(当時googleなんてなかったし)とかがいくらか身についたような気
がします。
とりあえず過去ログあさるとこから始めてみます
403 :
仕様書無しさん :03/06/12 01:41
>>398 ゲーム作れ
見た目はともかく、ちゃんとしたゲームを完成させろ
おれはノベルゲーム作りました。
絵が2,3枚しかないヤツだけど…しかも拾った絵だったけど…
ついでに言うと文章も拾ったヤツだったけど…
もっと言うと音楽も拾ったヤツだったけど…
でもでも、作りました!
ゲームエンジンつくりました。 (*´ー`*)
プログラム以外は、ほとんどパクリでしたけど、結構楽しかったです。
>>1 超先生の作品をゲームにしたいです
405 :
仕様書無しさん :03/06/12 06:02
>>395 俺には、なぜ2ちゃんねるで人生を棒に振っているのかわからない。
ほかにやるべきことがいくらでもあるのに、なぜここにいるのか。
10年後、本当にそれでよかったのかどうか考えてみよう。
昨日visualc++6.0使ってみました。 テキストファイルの新規作成をして、その中にコードを書きました。 これを実行ファイルにして保存したいのですがわからないので教えてください。
>>407 割れ物だから説明書とヘルプはないです。
>>408 素直だな。気に入ったよ。
F5キー押してみな。実行できるから。最初のプロジェクトを保存したところに実行ファイルは出力されてるよ。
それから割れ物はやめとけよ。自分で金出さんやつは8割方何も身につかん。
#include <windows.h> int WINAPI WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpszArgs,int nWinMode) { MessageBox(NULL,"ぬるぽ","message box",MB_OK); return 0; }
411 :
仕様書無しさん :03/06/20 17:09
>409 自分でかねだしたけど 勉強しなかったw
413 :
仕様書無しさん :03/06/21 00:21
>412 うるさいはげっヽ(`Д´)ノ
414 :
仕様書無しさん :03/06/21 00:51
>>396 >if((cc=(char)fgetc(read)
-1(=EOF) と0xFFは同値なのかと(ry
>>413 はっ、はげてないっつーのッ!ヾ(`Д´)ノ"
こんにちは。今日からC言語を学びます。 何か出来た時(ワンステップ進んだ時)は素知らぬふりを、挫折しそうになった時は追い討ちを。 そんな覚悟で取り組んでいきますので宜しくお願いします。
挫折シマソタ
早
>>410 GUIやらせるならウィンドウの生成ぐらい始めてはどうかと(しかしここの1はそんなにレベル高そうに無い(藁
>>419 後半同意。
多分お前と同じくらいのレベルなんだろうな。
421 :
仕様書無しさん :03/06/28 02:10
if文とint文が合いませんみたいなエラー出た場合はどうすればいいんでしょうか? それと予期せぬEOFとはなんのことですか?
422 :
仕様書無しさん :03/06/28 02:20
}で綴じ忘れ。
何で今更C言語なんだ? 営業してても、C++やJavaの仕事の方が多いぞ。
424 :
仕様書無しさん :03/06/28 03:07
C言語はどれにも応用できるからでないの?
営業さんはお帰りください
426 :
仕様書無しさん :03/06/28 21:01
漏れもいろいろな本を読んでみたけど身に付かなかった 仕事で無理矢理やってたら何とか出来るようになったって感じ
so re de 良い
428 :
仕様書無しさん :03/06/28 21:35
CやってればC++/Javaを覚えるのにそんなに工数かからんだろ。 Javaしか知らん奴がC/C++やるのはそれなりに工数かかる。
C市ねやらJava市ねやら、不毛な争いはやめんか? というか、自分のやってることに自信があれば 誰かに自分が利用してる言語否定されても、気にならないはずなんだが…。 …っと、2chでこんなこと言っても無駄かな
431 :
仕様書無しさん :03/07/04 00:08
別に人それぞれだから何言語でもいいと思う。 ちなみに俺はHello, worldのプログラムを見て一番わかりやすく感じたCを今がんばってます。
msgbox("hello world") が一番簡単じゃ・・・
433 :
仕様書無しさん :03/07/05 00:27
main(){} が一番簡単
>>433 素晴らしく活気的なhello,worldプログラムの誕生だ!
435 :
仕様書無しさん :03/07/07 15:59
だめだこりゃ
436 :
仕様書無しさん :
03/07/07 16:51