C言語質問スレ【激初心者】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/10/12(水) 00:07:44・最低でもC言語が何か分かってる人でお願いします。
・質問者は自分の環境をわかる範囲で書きましょう。
優しい方々が答えてくれることを期待してます。
0002デフォルトの名無しさん
2005/10/12(水) 00:10:060003デフォルトの名無しさん
2005/10/12(水) 00:11:280004デフォルトの名無しさん
2005/10/12(水) 00:21:13コンパイラ(ぷよぷよ):VISUAL STDIO 20003
#include<studio.h>
int main(void)
{
printf(”hello,work”);
0005デフォルトの名無しさん
2005/10/12(水) 06:56:040006デフォルトの名無しさん
2005/10/12(水) 10:34:19_━ ━_ _━ ━_
_━ ━_ _━ ━_
━ ○ ━ ━ ○ ━
 ̄━ ━ ̄  ̄━ ━ ̄
 ̄━ ━ ̄  ̄━ ━ ̄
 ̄━━━━━━ ̄  ̄━━━━━━ ̄
┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
━
━━ __ __ ━━
 ̄━ ━━__ __━━ ━ ̄
 ̄━ ━__ __━ ━ ̄
 ̄━ ━━━━━━ ━ ̄
 ̄━ ━ ̄
 ̄━_ _━ ̄
 ̄━_ _━ ̄
 ̄━━━ ̄
0007デフォルトの名無しさん
2005/10/12(水) 21:27:13なんかこんなファイルくれました。その人がいうにはそれあればほとんどのものがつくれるとか。
でも使おうにも意味不なもんなのでコレがなにか誰か教えてください。コンバイルっていってたかも・・?
http://www4.pf-x.net/~what/
0008デフォルトの名無しさん
2005/10/12(水) 22:12:06Microsoft Visual C++ 6.0 Professional Edition (Japanese)
0009デフォルトの名無しさん
2005/10/12(水) 22:15:18絶望を感じた・・・
0010デフォルトの名無しさん
2005/10/12(水) 23:33:450011デフォルトの名無しさん
2005/10/13(木) 00:06:27マジデスカ; 使い方っていうかコレ開いて使うものなのかコマンドプロントとかでアレをするのか分かんないんですが;
誰か教えてください orz
ちょっとなんかヤバそうなので一旦7のを外しときます
0012デフォルトの名無しさん
2005/10/13(木) 10:07:270013デフォルトの名無しさん
2005/10/13(木) 10:09:540014デフォルトの名無しさん
2005/10/13(木) 17:33:12char word[32] = "hello, world!";
char *ptr;
ptr = word;
printf("%s\n", word);
printf("%s\n", &ptr);
printfの上はふつうに表示されるのに下は文字化けします.
数値(%d),一つの文字(%c)では正常に表示されます.
文字列の場合は単純に先頭のアドレスをprintfに渡してもダメならば
どう扱うべきなのでしょうか?
0015デフォルトの名無しさん
2005/10/13(木) 17:40:42ptrはポインタだから、printf("%s\n", ptr);でいい。
0017デフォルトの名無しさん
2005/10/13(木) 18:43:32int main(){
set<string> in(istream_iterator<string>(cin), istream_iterator<string>());
copy(in.begin(), in.end(), ostream_iterator<string>(cout));
}
001817
2005/10/13(木) 18:44:220019デフォルトの名無しさん
2005/10/13(木) 23:16:27なにをどう勉強すればよいのでしょうか?
だれか教えてください。
0020デフォルトの名無しさん
2005/10/13(木) 23:26:380021デフォルトの名無しさん
2005/10/13(木) 23:42:520022デフォルトの名無しさん
2005/10/14(金) 10:05:59気軽に「こんなソフトありませんか?」 22
ttp://pc7.2ch.net/test/read.cgi/software/1129190874/
0023デフォルトの名無しさん
2005/10/18(火) 23:39:14ある駐車場があって、そこでは一時間駐車すると500円とられ
それから30分ごとに料金が200円追加される。
分単位で時間を入力したときにそのときの料金を表示させる。
このようなプログラムを作りたいのですが、どのようにすればいいか考え付きません。
めっちゃ基礎の範囲ですが、どなたか教えてください。
0024デフォルトの名無しさん
2005/10/18(火) 23:55:20int Ryokin(int hun){
if(hun <= 60) return 500;
else return ((hun - 31) / 30) * 200 + 500;
}
int main(void){
int n;
printf("時間を入力してください(分)\n");
scanf("%d",&n);
printf("%d円になります。\n",Ryokin(n));
return 0;
}
どちらかというと良心的な駐車場
0025デフォルトの名無しさん
2005/10/19(水) 00:26:53ありがとうございます!感謝感激です。
0026デフォルトの名無しさん
2005/10/19(水) 00:36:01入力するプログラムを作りたいのですが、できますか?
0027デフォルトの名無しさん
2005/10/19(水) 00:51:42できますが初心者向けではありません。
0028デフォルトの名無しさん
2005/10/19(水) 01:14:58日本語で言う単語です。
0030デフォルトの名無しさん
2005/10/19(水) 15:04:10大学のプログラミングの授業でC言語をならいはじめたんですが、講義形式の授業なのでさっぱりわけがわかりません。
自分でプログラム打って動かしたら理解ができそうなんですけど、
C言語をプログラミングできるソフトってネット上で手にはいりますか?
0031デフォルトの名無しさん
2005/10/19(水) 15:05:51講師に聞けよ。金払ってるんだろ?
0032デフォルトの名無しさん
2005/10/19(水) 15:08:280033デフォルトの名無しさん
2005/10/19(水) 15:17:090034デフォルトの名無しさん
2005/10/19(水) 15:22:540035デフォルトの名無しさん
2005/10/19(水) 15:32:030036デフォルトの名無しさん
2005/10/19(水) 15:38:040037デフォルトの名無しさん
2005/10/19(水) 16:22:49ttp://homepage3.nifty.com/mmgames/c_guide/
0038デフォルトの名無しさん
2005/10/19(水) 20:26:15どなたか教えてくださいm( __ __ )m
�@円柱の体積を求めるプログラムを作りなさい
ただし半径と高さはキーボードから入力する(変数の型をfloatにする)
�A時速(km/時)をキーボードから入力し、時速(m/秒)に変換して出力するプログラム作りなさい
(変数の型をfloatにする)
以上の2問でつ
お願いします
0039デフォルトの名無しさん
2005/10/19(水) 20:35:25宿題スレへ池
0040Ω
2005/10/19(水) 20:54:25real r,h,v
write(6,*) 'radius?'
read(5,*) r
write(6,*) 'hight?'
read(5,*) h
v=3.14159264*r*r*h
write(6,*) 'Volume=',v
stop
end
program convert_from_km/h_to_m/s
real s1,s2
write(6,*) 'speed? [km/s]'
read(5,*) s1
s2=s1/3.6
write(6,*) s2,'[km/h=',s,'[m/s]'
stop
end
0041デフォルトの名無しさん
2005/10/19(水) 20:56:18後はこれをC言語に変えるだけwww
>>38
004238
2005/10/19(水) 21:17:08余計わからない…
0043デフォルトの名無しさん
2005/10/19(水) 22:11:42004438
2005/10/19(水) 22:29:53聞いたことがないでつorz
上の2個の問題はなんとか自分で解けました
0045デフォルトの名無しさん
2005/10/19(水) 23:29:17> 時速(m/秒)
秒速だろ?
0046デフォルトの名無しさん
2005/10/19(水) 23:39:34まああれをFORTRANと呼ぶのが正しいのかどうかは疑問だが
0047デフォルトの名無しさん
2005/10/20(木) 00:05:53「0〜1の擬似乱数を30000個ずつ3行発生させるプログラム」がどうしてもできません…。
誰か教えてください…。
「1〜100の擬似乱数を10個ずつ10行」はできたのですが、それを変えてもうまくいきません。
一応、これがそのプログラムです
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
int i,j;
/* 乱数系列の変更 */
srand((unsigned) time(NULL));
/* 1〜100の擬似乱数を10個ずつ10行発生 */
for (i=1; i<=10; i++) {
for (j=0; j<10; j++) {
printf("%3d ",rand()%100+1);
}
printf("\n");
}
return 0;
}
どうかよろしくオナガイシマス……。
ちなみに富士通Fortranを使っています。
0048デフォルトの名無しさん
2005/10/20(木) 00:37:230049デフォルトの名無しさん
2005/10/20(木) 00:54:52何がどう駄目なのか、それを書かないと誰も回答できんよ?
005047
2005/10/20(木) 01:29:47私は>>47に書いた「1〜100の擬似乱数を10個ずつ10行発生」のプログラムを書き換えたら、「0〜1の擬似乱数を30000個ずつ3行発生」もできるような気がしてるんですが…
どこをどう書き換えたらうまくいくのかわかりません…。
それとも、書き換えるだけでは駄目ですか??
すみません、よろしくお願いします…。
0051デフォルトの名無しさん
2005/10/20(木) 02:25:30そもそも >>47 のプログラムを理解してないんじゃない?
なんかの丸写しだろ?
それじゃあ教えようすらないよ
0052デフォルトの名無しさん
2005/10/20(木) 03:10:470053デフォルトの名無しさん
2005/10/20(木) 11:39:050054デフォルトの名無しさん
2005/10/20(木) 11:42:000055デフォルトの名無しさん
2005/10/20(木) 12:45:132つの問題の違いを見ていけば、自然と答えが出るのでは。
「10」個を「30000」個に、「10」行を「3」行に、「「1〜100」を「0〜1」にっていう部分しか違わないじゃない。
プログラム中に出てくる数字も限られてるんだし、どこを書き換えればいいかはわかるでしょう。
for文とrand、srandがわかってないなら入門サイトなり授業だか研修だかで使ってる本なりを見れば
載ってるかと。
ちなみに rand()%5 の%は剰余(割ったあまり)を計算するものだから、0〜4の値になります。
0056デフォルトの名無しさん
2005/10/20(木) 12:57:17実は整数値でなくなるので若干の質的な変更も必要な罠。
0057デフォルトの名無しさん
2005/10/22(土) 17:08:17どうしても大文字に変換したものと小文字に変換したものが表示されません。
data.inというファイルがあるというものとして教えてください。
分割して書き込みます
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int capital(int);
int small(int);
int main(void)
{
int i;
FILE *inp,*outp;
/*入力ファイルのオープン*/
if((inp=fopen("data.in","r"))==NULL)
{
printf("can't open -- data.in\n");
exit(EXIT_FAILURE);
}
/*出力ファイルのオープン*/
if((outp=fopen("prog02.out","w"))==NULL)
{
printf("can't open -- prog02.out");
exit(EXIT_FAILURE);
}
0058デフォルトの名無しさん
2005/10/22(土) 17:09:03fprintf(outp,"通常データ\n");
while((i=fgetc(inp))!=EOF)
{
putc(i,outp);
}
fprintf(outp,"\n大文字に変換\n");
while((i=fgetc(inp))!=EOF)
{
putc(capital(i),outp);
}
fprintf(outp,"\n小文字に変換\n");
while((i=fgetc(inp))!=EOF)
{
putc(small(i),outp);
}
/*ファイルのクローズ*/
if(fclose(inp))
{
printf("\nfailed to close a file\n");
}
if(fclose(outp))
{
printf("\nfailed to close a file\n");
}
return EXIT_FAILURE;
}
0059デフォルトの名無しさん
2005/10/22(土) 17:12:06int capital(int moji)
{
int diff,i;
diff='a'-'A';
if('a'<=moji && moji<='z')
{
return moji-diff;
}
return moji;
}
/* 大文字 → 小文字 */
int small(int moji)
{
int diff;
diff='a'-'A';
if('A'<=moji && moji<='Z')
{
return moji+diff;
}
return moji;
}
0060デフォルトの名無しさん
2005/10/22(土) 17:22:33宜しくお願いします。
0061デフォルトの名無しさん
2005/10/22(土) 17:24:44最初の「通常データ」のループで入力ファイルを終端まで読み込んでいるので、
その後巻き戻さない限りもう読めるものがないという状況になっているだけ。
0062デフォルトの名無しさん
2005/10/22(土) 17:25:15fseekを使いましょう
0063デフォルトの名無しさん
2005/10/22(土) 17:26:140064デフォルトの名無しさん
2005/10/22(土) 17:29:07a. クローズして再オープンする
or
b. fseek()を調べろ
0065デフォルトの名無しさん
2005/10/22(土) 17:30:35rewind()の立場は?
006657
2005/10/22(土) 17:36:53巻き戻しの作業について調べたいと思います!
006757
2005/10/22(土) 17:52:28今コンパイルして実行してみたら、ちゃんと思い通りに動いてくれました!!
本当にありがうございました!!
物凄い悩んでいたから本当にうれしい。
0068デフォルトの名無しさん
2005/10/22(土) 19:32:52nを入力させて
1+3=4=2^2
1+3+5=9=3^2
…というようにn番目の奇数までを足していって
上のように表示させるのって出来ますか?forかwhileで
0069デフォルトの名無しさん
2005/10/22(土) 19:44:58//sum = 0 ;
for (i = 1; i <= n ; i ++)
{
// sum += 1 + 2 * (i - 1) ;
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
これでどうです?
007068
2005/10/22(土) 20:00:26nを4として
1+3+5+7=4^2とでました。
しかし自分はn=4としたら
1=1^2
1+3=2^2
1+3+5=3^2
1+3+5+7=4^2
というように設定したnより小さかった場合も
表示したいのですがこういうのはできませんかね?
0071デフォルトの名無しさん
2005/10/22(土) 20:13:45そのぐらい自分で書けないでどうしますか。
方針:
・>69を関数にする。
・1からnまでのループを作り、その中で上記関数を呼ぶ。
0072デフォルトの名無しさん
2005/10/22(土) 20:19:110073デフォルトの名無しさん
2005/10/22(土) 20:23:45んじゃ、関数化しないで変数名が競合しないように気をつけて書きな。
0074デフォルトの名無しさん
2005/10/22(土) 20:24:25for(n = 1; n <= m; n++){
for (i = 1; i <= n ; i ++)
{
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
}
0075デフォルトの名無しさん
2005/10/22(土) 20:28:12007672
2005/10/22(土) 20:58:59もう一回やってみます。
//m=4ていうのはmが4までやるってことですよね?
0077デフォルトの名無しさん
2005/10/22(土) 23:09:12単に変数名変えるのがめんどうだっただけ
#include <stdio.h>
int main(void){
int i,n,m = 4;
for(n = 1; n <= m; n++){
for (i = 1; i <= n ; i ++)
{
printf ("%d", 1 + 2 * (i - 1)) ;
(i != n) ? putchar ('+') : putchar ('=') ;
}
printf ("%d^2\n", n) ;
}
return 0;
}
007876
2005/10/22(土) 23:33:55今後はもっとちゃんと勉強します。
0079デフォルトの名無しさん
2005/10/23(日) 12:56:13#include<stdio.h>
int GetBekijyou(int, int);
void main(void)
{
int number1, number2;
int kekka;
number1=5;
number2=3;
kekka=GetBekijyou(number1,number2);
printf("%d no %d jyo=%d\n", number1, number2, kekka);
}
int GetBekijyou(int x, int y)
{
int z;
if(y==1)
return(x);
z = x*GetBekijyou(x, y-1);
return(z);
}
結果:5 no 3 jyo=125
008079
2005/10/23(日) 12:57:45これの再帰呼び出しの部分がよく分かりません・・・
xに関数GetBekijyouを掛けてるのかな、とか色々考えたんですが、それじゃおかしくなってしまって・・・
因みに、自分は中学、高校とも全くと言っていいほど数学が出来なかったんですが
これじゃC言語を学ぶのは厳しいでしょうか?orz
0081デフォルトの名無しさん
2005/10/23(日) 13:08:03> xに関数GetBekijyouを掛けてるのかな
そのとおりだけど何か。
0083デフォルトの名無しさん
2005/10/23(日) 15:40:14配列に文字列を入力から受け取ってそれを別の
配列にコピーするプログラムなんですが、配列
から配列に代入する部分でエラーが出ます。
どなたか原因がわかるかたがいらっしゃいましたら
お願いしますm(..)m
環境はredhatlinuxの8です。
----------ソース----------
1 #include <stdio.h>
2
3 int main(){
4 char name1[100];
5 char name2[100];
6
7 printf("input your name\n");
8 scanf("%s",name1);
9 printf("name1=%s\n",name1);
10
11 name2 = name1;
12 printf("name2=%s\n",name2);
13
14 return 0;
15 }
----------結果----------
# gcc test1.c
test1.c: 関数 `main' 内:
test1.c:11: 代入 に互換性のない型
0084デフォルトの名無しさん
2005/10/23(日) 16:16:59Cには文字列型は存在しない。
アドレスをアドレスには代入できない。
文字列のコピーには、strcpyを使う。
ってなところでどう?
0085デフォルトの名無しさん
2005/10/23(日) 16:17:00Cでは配列を配列に代入することはできません。素直にstrcpy()でも使ってください。
008683
2005/10/23(日) 21:52:13strcpyで解決しました!
0087デフォルトの名無しさん
2005/10/23(日) 22:09:25プログラムとは直接関係ありませんが、
コンソールアプリケーションで作った実行ファイルのアイコンを変換する方法
もしくはツールを知ってる方いたら、教えてもらえないでしょうか?
0088デフォルトの名無しさん
2005/10/23(日) 22:25:14ショートカットを作ってプロパティダイアログでアイコンの変更。
0089デフォルトの名無しさん
2005/10/23(日) 22:28:45リソースをくっつければEXEのアイコンを指定できる。
0090デフォルトの名無しさん
2005/10/24(月) 00:21:22たびたびすいません、もうひとつ質問よろしいでしょうか。
次のソースなんですが、関数に構造体のアドレスを渡して
scanfで入力した値を構造体のメンバに入れて、その値をmain
で表示するというプログラムです。
コンパイルは通ったのですが、実行すると落ちることがあります。
具体的にはscanfで入力する文字が半角英字で3文字までなら
ちゃんと表示してくれるのですが、4文字以上入れると表示せずに
"セグメンテーション違反です"とでます。
ちなみに、9,10行目を
struct Seito seito1;
startup(&seito1);
とした場合は4文字以上入れてもちゃんと表示してくれます。
どこがおかしいかわかる方いらっしゃいましたらよろしくお願いします。
環境はRedHatLinux8です。
0091デフォルトの名無しさん
2005/10/24(月) 00:22:23#include <stdio.h>
#include <string.h>
struct Seito{
char name[100];
};
int main(){
struct Seito * seito1;
startup(seito1);
return 0;
}
int startup(struct Seito * seito1);
int startup(struct Seito * seito1){
char name[100];
/* get name */
printf("input your name\n");
scanf("%s",name);
/* set struct player status */
strcpy(seito1->name,name);
printf("seito1 name is %s\n",seito1->name);
return 0;
}
0092デフォルトの名無しさん
2005/10/24(月) 00:40:33struct Seitoのメモリが確保されていない。
というわけでこうしてみな。
int main() {
struct Seito seito1;
startup(&seito1);
return 0;
}
0093デフォルトの名無しさん
2005/10/24(月) 00:53:02ありがとうございます。
92さんのやり方だとうまくいきます。
構造体変数をいきなりポインタ型で宣言しても領域は確保して
くれないんですね。(て認識であってますよね?)
理由がわかって助かりましたー。
0094デフォルトの名無しさん
2005/10/24(月) 07:19:46という課題が出ました、200字程度で書けって言われたけど全然分かりません
どのように答えれば良いのか教えてください
0095デフォルトの名無しさん
2005/10/24(月) 08:43:11また、あまりデータの偏りによらず、性能が劣化しない
0096デフォルトの名無しさん
2005/10/24(月) 09:20:32全てのノードが左方向だけ(or右方向だけ)につながって、それって線形リストと一緒やん状態
0097デフォルトの名無しさん
2005/10/24(月) 10:01:52void rev_intary(int vc[],int no) {/*・・・*/}
を作成しなさい。
このプログラムの作成方法がまったく分かりません・・・。const型修飾子と関係あるんですか?
よろしければ、教えてください。お願いします。
0098デフォルトの名無しさん
2005/10/24(月) 10:07:350099デフォルトの名無しさん
2005/10/24(月) 10:08:40関係ないんですか・・・。このプログラムはどう作成すればいいんでしょうか・・?
0100デフォルトの名無しさん
2005/10/24(月) 10:13:16安直に
void rev_intary(int vc[], int no)
{
int i, t;
for (i=0; i<no/2; i++) {
t = vc[i]; vc[i] = vc[no-i-1]; vc[no-i-1] = t;
}
}
0101デフォルトの名無しさん
2005/10/24(月) 10:18:07ありがとうございます。しかしこのプログラムで翻訳するとエラーになるんですが・・・。
0102デフォルトの名無しさん
2005/10/24(月) 10:21:480103デフォルトの名無しさん
2005/10/24(月) 10:22:15エラーが起きたときはエラーメッセージを貼りましょう。
0104デフォルトの名無しさん
2005/10/24(月) 10:35:04もう1つよろしいでしょうか?
一応自分でプログラム作ったのですが(2行3列の行列と3行2列の行列の積)
エラーが出てしまいます。
エラー:不適合なポインタが指定されています。
エラーが出るのはmul(ma,mb,mc);の所です。
0105デフォルトの名無しさん
2005/10/24(月) 10:35:34#include <stdio.h>
void mul(const int ma[2][3],const int mb[3][2],int mc[2][2])
{
int i,j;
for(i=0;j<2;i++)
for(j=0;j<2;j++)
mc[i][j]=ma[i][j]*mb[i][j];
}
int main(void)
{
int i,j;
int ma[2][3]={{1,2,3},{4,5,6}};
int mb[3][2]={{5,6},{8,2},{1,3}};
int mc[2][2]={0};
mul(ma,mb,mc);
for(i=0;i<2;i++){
for(j=0;j<2;j++)
printf("%3d",mc[i][j]);
putchar('\n');
}
return(0);
}
0106デフォルトの名無しさん
2005/10/24(月) 10:41:09const外せ
0107デフォルトの名無しさん
2005/10/24(月) 10:42:24はずしていいんですか?一応問題文と例題(類題)ではconstを使用するようにと書いてあるんですが、、。
0108デフォルトの名無しさん
2005/10/24(月) 11:01:26別にエラー出ないけど。どうしてもエラー出るならmainの中のmaとmbにもconstつけてみたら?
ちなみにmulの中てきとーすぎw
どっちが行でどっちが列か知らないが勘でやるとこんな感じか
for(i=0; i<2; i++)
for(j=0; j<3; j++)
for(k=0; k<2; k++)
mc[i][k] += ma[i][j] * mb[j][k];
0109デフォルトの名無しさん
2005/10/24(月) 11:04:49エラー出て、いろいろいじったんですが結局計算結果が0になってしまいました。
一応、このプログラムは本の類題を自分で打ったんですけどおかしいんですか、、、orz
0110デフォルトの名無しさん
2005/10/24(月) 11:07:52一応、2行3列×3行2列の計算です。
0111デフォルトの名無しさん
2005/10/24(月) 11:11:12mat_add(ma,mb,mc);になってるんですよ。そして解説のはma,mbの和をmcに格納と書いてあります。
0112デフォルトの名無しさん
2005/10/24(月) 11:20:04それに行列の積は各要素をかけたものじゃないわけだが・・・
0113デフォルトの名無しさん
2005/10/24(月) 11:22:55もうわけわからない・・・・。
0114デフォルトの名無しさん
2005/10/24(月) 11:23:380115デフォルトの名無しさん
2005/10/24(月) 11:28:040116デフォルトの名無しさん
2005/10/24(月) 11:31:58もしかして、それって柴田望洋先生の本じゃない?
0117デフォルトの名無しさん
2005/10/24(月) 11:32:57そうだよ。明解C言語入門編
0118デフォルトの名無しさん
2005/10/24(月) 11:42:16ちなみにどんな環境でやってまつか?
0119デフォルトの名無しさん
2005/10/24(月) 11:46:25開発マネージャというのを使っています。OSはXPです。
みなさん、質問に答えていただきありがとうございました。もう1回自分で考えてみます。
また不明な点があったら質問したいと思いますのでその時はど素人ですがよろしくお願いします。
0120デフォルトの名無しさん
2005/10/24(月) 11:54:26ものすごい気になる。何だそれ。
0121デフォルトの名無しさん
2005/10/24(月) 11:54:36#include <stdio.h>
void mul(const int ma[2][3],const int mb[3][2],int mc[2][2]){
int i,j,k;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
for(k=0;k<3;k++)
mc[i][j]+=ma[i][k]*mb[k][j];
}
int main(void){
int i,j;
int ma[2][3]={{1,2,3},{4,5,6}};
int mb[3][2]={{5,6},{8,2},{1,3}};
int mc[2][2]={0};
mul(ma,mb,mc);
for(i=0;i<2;i++){
for(j=0;j<2;j++)
printf("%3d",mc[i][j]);
putchar('\n');
}
return(0);
}
一応こんなじゃだめかな
0122デフォルトの名無しさん
2005/10/24(月) 11:55:53Fujitsu Fortran&Cか
0123デフォルトの名無しさん
2005/10/24(月) 11:57:330124デフォルトの名無しさん
2005/10/24(月) 13:32:09いちおう細かいことつっこんでおくと、mulの中の
for(j=0;j<3;j++)
のところ、3じゃなくて2じゃね?
0125デフォルトの名無しさん
2005/10/24(月) 14:16:07そでした。スマソ。
0126デフォルトの名無しさん
2005/10/24(月) 17:19:56その為に有用な本やサイトはありますか?
手元にある入門書には載ってなくて、さっぱり分からないんです。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "tdc.hh"
int main(int argc, char **argv){
class TDC tdc;
if(argc != 3){
fprintf(stderr,"Invalid argument\n");
fprintf(stderr,"Usage: tdcana <target name (data file)> <destination name (root file)>\n");
exit(1);
}
tdc.Init(argv[1],argv[2]);
tdc.Analyze();
tdc.End();
return 0;
}
0127デフォルトの名無しさん
2005/10/24(月) 17:21:28classというのはC++のもの。
だからまずはC++の勉強をしてみな。
0128デフォルトの名無しさん
2005/10/24(月) 17:28:31ビットマップを入出力するため、下のサイトからソースを借りて使っているのですが、
2枚画像を読み込むと2枚目が正常に入力できていないようなのです。
メモリを確保できていないためかと思い、malloc関数などを調べましたがよく分かりませんでした。
具体的にはimage[480][640][3]のように三次元の配列での使い方がわかりませんでした。
それとも原因は別にあるんでしょうか?よろしくお願いします。
ttp://www.fit.ac.jp/elec/7_online/lu/tanosigazou.htm
0129デフォルトの名無しさん
2005/10/24(月) 17:46:05そのサイトを書いたらしい三国人に聞けばいいだろう。
0130デフォルトの名無しさん
2005/10/24(月) 18:19:54ずっとCだと思ってました……
ありがとうございます
0131デフォルトの名無しさん
2005/10/24(月) 19:33:320132デフォルトの名無しさん
2005/10/24(月) 22:22:22>>121
>>122
>>121さんありがとうございます。一応、エラーが出たんですが開発マネジャーでやると必ずエラーが出るそうでそれを無視して翻訳すればOKだそうです。
とても助かりました。本当にありがとうございます。
>>120さん、>>122さんのおっしゃるとおりです。
0133help me
2005/10/24(月) 23:01:21typdef struct{
char weekend[7];
char week[7];
}WEEK;
という構造体のchar week[7];に、“月火水木金土”をコピーします。
(あるソースファイルで)
他の出力専用のソースファイルで、for文でprintfの%cを使って出力します。
すると、途中までしか表示されません。
何故??
ちなみにOSはUNIX。
0134デフォルトの名無しさん
2005/10/24(月) 23:08:33月火水木金土だけのファイルをエディタで作ってファイルサイズを見て味噌。
0135デフォルトの名無しさん
2005/10/24(月) 23:09:04wchar week[7]として%wcを使うか、char week[14]にして%c%cで2文字づつ出すかのどっちかが簡単
0136デフォルトの名無しさん
2005/10/24(月) 23:24:00この世のどこかにはcharにUTF-16を使うリッチな環境があるかもしれないw。
0137デフォルトの名無しさん
2005/10/24(月) 23:24:42UnicodeじゃないけどTRONとかな
0138デフォルトの名無しさん
2005/10/24(月) 23:26:53入ってたな
0139デフォルトの名無しさん
2005/10/24(月) 23:44:090140デフォルトの名無しさん
2005/10/24(月) 23:46:29}
void *func;
func = AAA;
このfuncからAAA関数の実行の仕方を教えてください。
0141デフォルトの名無しさん
2005/10/24(月) 23:48:04void *funcで受けたらダメだろ
void (*func)()で受けないと
0142デフォルトの名無しさん
2005/10/24(月) 23:48:45じゃないの?
0143デフォルトの名無しさん
2005/10/24(月) 23:49:49func();
0144デフォルトの名無しさん
2005/10/24(月) 23:50:49どうすればいいのですか?
0145デフォルトの名無しさん
2005/10/24(月) 23:53:05そりゃWindowsの機能。
0146デフォルトの名無しさん
2005/10/24(月) 23:56:38>>87
>>88
0147デフォルトの名無しさん
2005/10/25(火) 00:25:59scanf( "%d",work );
で、間違って"8a"を入力したら、無限ループになりました。
0148デフォルトの名無しさん
2005/10/25(火) 00:50:310149デフォルトの名無しさん
2005/10/25(火) 01:00:140150デフォルトの名無しさん
2005/10/25(火) 01:56:21int m, n;
printf( "整数は?" );
scanf("%d,&n);
scanf("%d,&m);
printf( "%d %d は", n, m );
if(m=1 || n>0 );
{ printf( "真 " );
}
else
{ printf( "偽 ");
}
是どこか変ですか?
0151デフォルトの名無しさん
2005/10/25(火) 02:46:47おまえの頭
エラーが出たのか思い通りの出力が出ないのか
ああもう何でもいいから何をしたらどうなったか書いてくれ
0152デフォルトの名無しさん
2005/10/25(火) 02:49:34とりあえず
× if(m=1 || n>0 );
○ if(m=1 || n>0 )
0153デフォルトの名無しさん
2005/10/25(火) 03:21:34おまえの頭
仮にC言語だとしても (m=1||n>0)なんて、代入式とで何を判定したいんだか…
0154デフォルトの名無しさん
2005/10/25(火) 17:41:59double d[1000][1000]のように大きな配列を宣言するとプログラムが落ちます。
double d[100][100]くらいなら問題無いのですが・・・
メモリは512MBなので十分のはずなのですが、なにか設定があるのでしょうか?
0155デフォルトの名無しさん
2005/10/25(火) 17:46:480156デフォルトの名無しさん
2005/10/25(火) 17:47:30void AAA(){
}
void *func;
func = AAA;
((void *())AAA)();
0157デフォルトの名無しさん
2005/10/25(火) 17:49:410158デフォルトの名無しさん
2005/10/25(火) 17:50:140159デフォルトの名無しさん
2005/10/25(火) 18:14:48どんだけの能力持ってるのか知らんが,いまどきCだけ出来てもな・・・
0160デフォルトの名無しさん
2005/10/25(火) 18:38:29人間性に問題があるのでは?
と、釣られてみるテスト
0161デフォルトの名無しさん
2005/10/25(火) 18:44:050162デフォルトの名無しさん
2005/10/25(火) 18:50:570163デフォルトの名無しさん
2005/10/25(火) 18:52:12ワラタ
0164デフォルトの名無しさん
2005/10/25(火) 18:55:27そんなもの取得するな
0165162
2005/10/25(火) 18:56:48カレントディレクトリにないファイルを実行するときとか困るんだよ
0166デフォルトの名無しさん
2005/10/25(火) 18:58:10そんなクソ仕様を見直せ
0167デフォルトの名無しさん
2005/10/25(火) 18:59:04なぜでしょうか(C++のコンパイラを使っているから?)。
#include <stdio.h>
int main ( void )
{
char *w[] = { "sun", "mon", "tue", "wed", "thu", "fri", "sat", };
int k;
printf(" %s ", w[1] );
printf(" %s ", *(w+1) );
printf(" %s ", w[1][0] );/*これは、うまく”m”が出ない。プログラムが止まる*/
printf(" %s ", *(w[1]+1) );/*これも、うまく”o”が出ない。プログラムが止まる*/
return 0;
}
0168デフォルトの名無しさん
2005/10/25(火) 19:01:35コンパイラを疑う前に、自分で書いたソース疑えよ。
0169デフォルトの名無しさん
2005/10/25(火) 19:07:30下二つのprintfの%sを%cにしてみそ
0170162
2005/10/25(火) 19:35:09argv[0]はコンパイラによってちがうし
0171デフォルトの名無しさん
2005/10/25(火) 19:52:100172デフォルトの名無しさん
2005/10/25(火) 20:17:37SJIS<->Ucs2の相互変換をするにはどうしたらいいでしょうか。
0173デフォルトの名無しさん
2005/10/25(火) 20:18:43MultiByteToWideChar
0174デフォルトの名無しさん
2005/10/25(火) 21:18:59C標準ライブラリの範囲ではmbstowcs()。
予めsetlocale(LC_ALL, "Japanese");を行うと入力元がShift JISとして扱われるようになる。
0175デフォルトの名無しさん
2005/10/25(火) 22:41:49私も以前、実行ファイルの絶対パスを知る方法を聞いたとき、設計を見直せといわれました。
では、それを知ることなく外部ファイルのデータを読み込むにはどうすればいいんでしょうか。
例えば、Windows 上で動作するプログラム hoge.exe は、
同じディレクトリにある aaa.txt からデータを読み込み、表示するとします。
このとき、ファイルのオープンを fopen("aaa.txt", "r") などとします。
ところが、例えば Windows 上で hoge.exe を、外部ファイルの D&D で起動したときなど、
カレントディレクトリの位置が環境依存で変更されてしまうことがあります。
(XP の場合、C:\Document and Setting\(ユーザ名)\ になります)
このとき、上記の fopen は、aaa.txt を見つけられず失敗します。
これを防ぐには、実行ファイルの絶対パスを取得し、
実行ファイルのあるディレクトリをカレントディレクトリにする以外の方法が見つかりません。
ご教授よろしくお願いします。
0176デフォルトの名無しさん
2005/10/25(火) 22:44:180177デフォルトの名無しさん
2005/10/25(火) 22:46:59ウィンドウアプリだったらファイル選択ダイアログ
コマンドラインだったらパラメータでパス指定
ってとこ。
0178デフォルトの名無しさん
2005/10/25(火) 22:51:24別に実行ファイルの絶対パスを知ってどうにかすること自体はそんなに変なことではない。
標準Cだけを扱うスレではスレ違いだというだけのこと。
Win32APIスレにでもいけばいい。
0179デフォルトの名無しさん
2005/10/25(火) 23:08:31アプリケーションと常に対に存在する必要のあるデータなら、インストール時に確定すればいい。
設定ファイルのようにプログラム中で書き込むような場合は各ユーザのホームにでも書けばいい。
いずれにしろ、アプリケーションのある場所を動的に確保するような設計は望ましくない。
0180175
2005/10/26(水) 02:07:50ありがとうございます。
インストール時に決定するというのは目から鱗でした。
また、確かにデータを My Documents や Common Files に書き込むアプリもありますね。
スレ違いにもかかわらず、ありがとうございました。
0181デフォルトの名無しさん
2005/10/26(水) 09:12:16むしろ、ユーザ毎の「Application Data」に入れる方がいいんでない?
0182デフォルトの名無しさん
2005/10/26(水) 15:17:40BASICの2^1.5みたいに簡単な表現ってできないんですか?
0183デフォルトの名無しさん
2005/10/26(水) 15:24:26http://pc8.2ch.net/test/read.cgi/tech/1128354256/
こっちでやれ
0184風来坊
2005/10/26(水) 16:34:37GLで線光源と面光源を実現したいんですけど・・・
0185デフォルトの名無しさん
2005/10/26(水) 16:36:0916個
0186風来坊
2005/10/26(水) 16:38:00てことは二つとも難しいですかねぇ・・・
0187風来坊
2005/10/26(水) 16:40:240188デフォルトの名無しさん
2005/10/26(水) 16:50:20ヒントをベースにして次まで作って見たんですが…
#include<stdio.h>
#include<math.h>
main()
{
int a,i,flag;
for(a=2 ; a<=100 ;a++){
flag=0;
for(i=2 ;i<=a-1;i++){
if( (a%i) == 0 ){;
flag=1;
break;
}
}
}
if(flag){
printf("%d is a prime number.\n",a);
最後から二行目の if(flag〜)の〜に何か付け加えないと
うまくプログラムが働いてくれないのですが…
何を入れればよいか全く分かりません…。
教えてください。
0189デフォルトの名無しさん
2005/10/26(水) 16:53:24宿題スレでやれ
0190デフォルトの名無しさん
2005/10/26(水) 16:56:330192デフォルトの名無しさん
2005/10/26(水) 23:09:52警告 W8065 sample.c 5 :プロトタイプ宣言のない関数 printf の呼び出し(関数 main)
と出てきたのですが、どうすればなおるかわかる方いませんか?
0193デフォルトの名無しさん
2005/10/26(水) 23:12:23Bccを使っているのならおそらくbcc32.cfgが適切な内容でない。
あるいは<stdio.h>のインクルードが正しく書かれていない。
0194デフォルトの名無しさん
2005/10/26(水) 23:39:14コンパイラを変えろ
0195デフォルトの名無しさん
2005/10/26(水) 23:47:05まじ感謝!!!
俺あほだからすんげぇ時間かかって最後の難関だった。
ほんとありがとう!
0196デフォルトの名無しさん
2005/10/27(木) 11:19:49LinuxでC言語を扱ってます。ソケットを使ってプロセス間通信を行っているのですが、
タイムアウトの設定方法が解りません。
ファイルディスクリプタを使用してRead・Writeを行っているのですが、
サーバ側でWriteの必要が無い間、クライアントがReadでブロックしない様にする為に
タイムアウトを設定したいのです。
ネット上を探しても今一ぴんと来るものが無かったもので…
どうぞご助力下さいませ…
0197デフォルトの名無しさん
2005/10/27(木) 11:38:08setsockopt()で出来なかったかな。このあたり見てみ。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man2/setsockopt.2.html
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man7/socket.7.html
0198デフォルトの名無しさん
2005/10/27(木) 13:03:23その中から最大の要素と最小の要素を発見する場合、どうすればいいんでしょうか。
もし個数が決まっていれば、forとかでその個数までで考えればできるというのはわかるのですが、
個数が不定の場合、どうやって存在する個数までで打ち切るかがわかりません。
0199デフォルトの名無しさん
2005/10/27(木) 13:20:09何がわかっていないかをわかっていない事を如実に示した質問だな。
まず「存在する個数を取得する方法」の有無を示してもらわないと回答不能だ
0200デフォルトの名無しさん
2005/10/27(木) 13:23:03番兵おくしかないだろ
0201デフォルトの名無しさん
2005/10/27(木) 13:32:16その配列の末端の要素が常に一致(例えば-1になる)するとかいうわけでもなく、常にバラバラです。
おまけに個数もバラバラなので、どうも無理なんじゃないかと勝手に結論付けつつあるのですが、
何分まだ知識が少ないものではっきりとは判断しかねます…。
>>200
ぐぐってみましたが、番兵とは上に書いたような手法で判断する方法ってことで大体良いでしょうか。
そうでない場合においては、要素の個数の取得は不可能なのでしょうか。
0202デフォルトの名無しさん
2005/10/27(木) 13:35:26配列と言うがそのデータはどこにあるのか?
0203デフォルトの名無しさん
2005/10/27(木) 13:40:440205デフォルトの名無しさん
2005/10/27(木) 14:03:420206デフォルトの名無しさん
2005/10/27(木) 14:17:38個数を貰うか、終端を判断できるI/Fを設け、
個数が判る様にしなければ無理。
0207まだ見てるかな?
2005/10/27(木) 14:48:55ヒント:変数wへのアクセスが十分に理解できていない。
【問題1】 printf(" %s ", w[1][0] );/*これは、うまく”m”が出ない。プログラムが止まる*/
このソースでw[1][0]は、char* w[1]("mon")の[0]なので、char型の'm'を指している。
この'm'の値(文字コード値)をそのままprintf関数へ渡しているので、アウト!
※ printf( " %s ", 'm'の文字コード ); と解釈されてしまうため
"mon"を表示させたく、w[1][0]を指すポインタ値としてアドレスを渡すには、
printf(" %s ", &(w[1][0]) ); と記述する。
【問題2】 printf(" %s ", *(w[1]+1) );/*これも、うまく”o”が出ない。プログラムが止まる*/
これもchar型の'o'をそのまま文字コード値としてprintf関数へ渡しているので、アウト!
"on"を表示させたく、アドレスを渡すには、printf(" %s ", w[1]+1 ); と記述すればOK。
P.S.
あとwを初期化する部分の"sat"の後ろのカンマは念のため消しておきましょう。
0208196
2005/10/27(木) 15:39:56やはりそこでしたか…一度目を通したのですが、少々理解に苦しみまして(汗)
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);
恐らくこれを使うのだとは思います。頂いたURLを見る限り、
「s」にはソケットのディスクリプタを、「level」は指示された通りSOL_SOCKETを。
「optname」にはSO_RCVTIMEOを入れるのは解るのですが、後ろ2つが解りません。
感覚的にはvalにこの場合タイムアウト長を設定した変数アドレスかな?
と思うのですが、一番最後は本当に何を入れたら良いのか…
試してみるにも見当自体つけられない有様でして、面目ないです。
もし宜しければ、簡単にでも教えて頂けませんか?
0209デフォルトの名無しさん
2005/10/27(木) 15:43:33m>nならばmとnを交換する
m←m-n
m=0であればアルゴリズムを終了する このときnが最大公約数であるみたいなプログラム組んでもらえませんか?
0210デフォルトの名無しさん
2005/10/27(木) 15:44:27それは質問ではなく課題やってくれってことだろ
スレ違い
0211デフォルトの名無しさん
2005/10/27(木) 16:05:25プログラミングに関しては全くの素人です。
これからC言語を始める初心者にお勧めの本がありましたら、
是非教えて下さい。
よろしくお願いします。
0212デフォルトの名無しさん
2005/10/27(木) 16:37:03最近のはよく知らないけど、入門C言語あたりかな。
古いK&R本は勘違いなまま覚える危険がある。
どこかWebで良い参考書がダウンロードできてたんだが、失念。
0213197
2005/10/27(木) 17:00:24struct timeval tv;
tv.tv_sec = 10; // 10sec
tv.tv_usec = 0; // 0μsec
// タイムアウトを10秒に設定
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
これで分かるよね?
0214デフォルトの名無しさん
2005/10/27(木) 17:01:02「明解C言語 入門編」がオススメ。
初心者向けで凄く分かりやすい。
踏み台としては最適じゃなかろうか。
0215デフォルトの名無しさん
2005/10/27(木) 17:18:360216デフォルトの名無しさん
2005/10/27(木) 17:22:460217デフォルトの名無しさん
2005/10/27(木) 17:23:59何か恨みでも?
0218デフォルトの名無しさん
2005/10/27(木) 17:32:17引数つきのコンストラクタを持つクラス
class A
{
A(int);
};
を、別のクラスのメンバ変数として持つとき、
class B
{
A a;
};
引数はどのようにして渡せばいいのでしょうか?
0219デフォルトの名無しさん
2005/10/27(木) 17:41:15Bのコンストラクタで初期化リストを使う。
B(int n) : a(n)
0220デフォルトの名無しさん
2005/10/27(木) 18:11:240222デフォルトの名無しさん
2005/10/27(木) 19:31:110223196
2005/10/28(金) 09:18:51当然ですが、動きました〜ありがとうございます!
条件分岐でReadの返り値が-1の時はソケット読みをbreakする様にしたので解決です。
ありがとうございます、助かりました。これからtimevalの中覗いて来ようと思います。
>>211
参考書を買う前に、サイトで学ぶ手もある気もします(本は有った方が当然良いですが。
○でもわかるプログラミング、ってサイト様があるんですが…言って良いのかな?(; ̄- ̄)
0224デフォルトの名無しさん
2005/10/28(金) 13:09:53書いても良いけど、サイトで見て理解できる奴はすでにぐぐって見つけてると思う
ようするにこういうところで「初心者です。本教えてください」ってのは本のような紙媒体から始めないとしっくり来ない奴ら
0225デフォルトの名無しさん
2005/10/28(金) 19:38:53ttp://homepage1.nifty.com/toshio-k/
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/
BirdPort
http://www.birdport.jp/
結構、C言語を解説してるサイトがあるんだよね。
0226デフォルトの名無しさん
2005/10/28(金) 22:30:09初心者なんですが、メモリを確保しても使うような場面が見当たりません
0227デフォルトの名無しさん
2005/10/28(金) 22:45:24必要な場面がくるまで使わなくていいですよ
0228デフォルトの名無しさん
2005/10/28(金) 22:47:45ありがとうございます
0229デフォルトの名無しさん
2005/10/29(土) 14:38:09固定の配列だけでは"にっちもさっちも"いかなくなったら使う羽目になるよ。
ある時はbuf[20]、ある時はbuf[2048]、そしてある時はbuf[????]のように
実行時にbufサイズを決めないといけない場合に使う。
0230デフォルトの名無しさん
2005/10/29(土) 16:24:26たとえば要素数Nが変化する配列が欲しくなったら
buf = (char *) malloc(sizeof(char)*N)
のようにするってことでしょうか?
0231デフォルトの名無しさん
2005/10/29(土) 16:45:05どうでもいいが、sizeof(char)と書くのは不条理。
0232デフォルトの名無しさん
2005/10/29(土) 19:47:46そんな感じ。
あと固定でも巨大配列が一時的に必要な場合、スタック領域からでなくヒープ領域
から確保する場合にも使うね。
int func_1( void )
{
int buf[1024][1024]; // スタック領域やばす!の判定がアプリでは原則ムリ orz
・
・
・
return OK;
}
int func_2( void )
{
int **buf; // ヒープ領域から確保するYO。ワクワク
buf = (int**)malloc( sizeof(int) * 1024 * 1024 );
if ( buf == NULL )
return ERR; // ヒープ領域やばす!
・ // 大丈夫ダッタ (・∀・)
・
・
free( buf );
return OK;
}
0233デフォルトの名無しさん
2005/10/31(月) 00:39:09例えば、エディタ(ひでまる)とVisual C++でC言語練習しようと
してるけど。
秀丸でソース書いて、VisualC++で開いてコンパイル→実行でやっとソースを動かせるんでしょ。
もっと簡単にできるやりかたあったよね。たしか。
エディタはVisualC++にもあるけど、秀丸の方が使いやすいんだっけな?
0234デフォルトの名無しさん
2005/10/31(月) 00:42:0226才になろうとしてるけど、今からC言語でも覚えようとしてるよ。一般教養に。そのうち使えれば便利だと思って。
0235デフォルトの名無しさん
2005/10/31(月) 00:45:41ってか、プログラミング以前の問題ですけど。。
0236デフォルトの名無しさん
2005/10/31(月) 01:23:060237デフォルトの名無しさん
2005/10/31(月) 01:43:35俺がプロでやってた頃、UNIXではターミナルでviかemacsだけ。
DOS環境ではFILMTNやFDにVZエディタ、コンパイルツールを組み合わせて
擬似IDE(統合開発環境)化していた。そしてWindowsNT3.1ではVCが今一つで
Borland C/C++ 4.0が便利に使えるレベルだったな。エディタだけは秀丸。
そのころのエディタの設定は、背景色:紺、文字色:白or黄、タブ:4文字。
ただVZエディタは行数の多いソースを書き出すと、テキストの一部を欠損する
致命傷があった。以降はずーっとWindowsで秀丸ユーザです。
0238デフォルトの名無しさん
2005/10/31(月) 12:57:50> ウィンドウとか。配色とか。フォントとか。
そんなもの、個人の趣味の領域でプロ/アマ関係ないだろ。
そもそも、それはプログラミングの環境じゃないし。
0239デフォルトの名無しさん
2005/10/31(月) 13:37:22Windows環境に移行してからもしばらくはVZ使ってたよ。
0240点・点・点」
2005/10/31(月) 14:20:05Cにはありますでしょうか?
0241デフォルトの名無しさん
2005/10/31(月) 14:25:040242点・点・点」
2005/10/31(月) 14:30:44例えばどのようなものでしょうか。
日本語対応版はありますでしょうか。
0243点・点・点
2005/10/31(月) 15:45:30使うためのライブラリはどこにありますでしょうか。
http://www.delorie.com/pub/djgpp/current/v2gnu/gcc342s.zip
こちらにはありませんでした。
0244点・点・点
2005/10/31(月) 16:09:43ここにありました。
しかし、下記のような結果がでてコンパイルがとおりません。
エラー E2141 VOLID.C 36: 宣言の構文エラー
下記のような記述をしました。
#include <stdbool.h>
bool Flg;
ソフトは borland のフリーのBorland C++ 5.5です。
落としてきたファイルは、
同ソフトの Includeフォルダ に格納しました。
0245デフォルトの名無しさん
2005/10/31(月) 17:54:430246点・点・点
2005/10/31(月) 18:17:16#ifndef _STDBOOL_H
#define _STDBOOL_H
#ifndef __cplusplus
#define bool_Bool
#define true1
#define false0
#else /* __cplusplus */
/* Supporting <stdbool.h> in C++ is a GCC extension. */
#define _Boolbool
#define boolbool
#define falsefalse
#define truetrue
#endif /* __cplusplus */
/* Signal that all the definitions are present. */
#define __bool_true_false_are_defined1
#endif/* stdbool.h */
0247デフォルトの名無しさん
2005/10/31(月) 18:39:21*.cファイル中ではプリプロセッサは効かないんでしょうか?
そうだとしたら*.hに実装も含めなくてはいけないんでしょうか?
よろしくです。
0248247
2005/10/31(月) 18:40:20#pragma message(">>test.c\n")の部分が出力されません…。
// main.c
#define DEFINED
#include "test.h"
int main(void) { return 0; }
0249247
2005/10/31(月) 18:40:55// test.h
#ifndef __DEFINE_TEST_H__
#define __DEFINE_TEST_H__
#ifdef DEFINED
#pragma message(">>test.h\n")
#endif
#endif
// test.c
#include "test.h"
#ifdef DEFINED
#pragma message(">>test.c\n")
#endif
0250デフォルトの名無しさん
2005/10/31(月) 18:43:230251デフォルトの名無しさん
2005/10/31(月) 18:52:37圧縮するファイル名に[]が含まれているとき圧縮に失敗してしまいます
よろしければ回避方法をご教授ください
0252247
2005/10/31(月) 19:03:33ファイル間で共有される定義や宣言を記述するファイルですよね?
まだ他に重要な意味があるんでしょうがまだ初めて間もないので
もしよかったら今回の質問に関係する所だけでも教えてもらえませんか?
0253デフォルトの名無しさん
2005/10/31(月) 21:55:43#define bool _Bool
をtypedef char _Bool;か何かに書き換えてみろ。
BorlandはC99非対応だから_Bool型は存在しない。
そもそも拡張子cppでコンパイルすればstdbool.hなんて要らないよ。
0254233
2005/10/31(月) 23:45:26まえできたけど、今ググッてもわからないんだよね。
気軽にプログラム書ける環境教えてください。
0255デフォルトの名無しさん
2005/11/01(火) 00:54:25cygwin+xyzzy
或いは
linux+mule
0256デフォルトの名無しさん
2005/11/01(火) 00:55:260257点・点・点
2005/11/01(火) 10:04:28ありがとうございました。
出来ました。
0258デフォルトの名無しさん
2005/11/01(火) 11:45:100259点・点・点
2005/11/01(火) 15:27:590260デフォルトの名無しさん
2005/11/01(火) 16:06:49ボリュームシリアルとは何でしょうか。
0261点・点・点
2005/11/01(火) 16:10:03フォーマットされたディスクに自動的に付加される番号です。
0262デフォルトの名無しさん
2005/11/01(火) 16:33:39それは書き換えられるかもしれませんし書き換えられないかもしれません。
少なくとも、ボリュームシリアルと言う概念のないOSでは書き換えられません。
0263点・点・点
2005/11/01(火) 16:46:24Windowsでもフォーマットされたドライブには付加されます。
0264デフォルトの名無しさん
2005/11/01(火) 16:59:28二次元配列を用意し、それをソートするだけのプログラムなんですが、
なんかうまいこと動作しません。
/* -- ソース -- */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXDATA 3
#define MAXSTR 256
int cmp(const char * , const char *);
int main(void){
char (*data)[MAXSTR];
int i;
data = malloc(sizeof(*data) * MAXDATA);
for(i = 0 ; i < MAXDATA ; i++)
printf("%d人目の名前 -> " , i + 1); scanf("%s" , data[i]);
qsort(data , MAXDATA , sizeof(char *) , (int(*)(const void * , const void *))cmp);
for(i = 0 ; i < MAXDATA ; i++)printf("%s\n" , data[i]);
return 0;
}
int cmp(const char *s1 , const char *s2){
return strcmp(s2 , s1);
}
0265デフォルトの名無しさん
2005/11/01(火) 17:00:25MS-DOS/Windowsの話なら、MSDNを「ボリューム シリアル」で検索すればすむ話だとは思いませんか?
0266デフォルトの名無しさん
2005/11/01(火) 17:02:42それは二次元配列ではなく、ポインタの配列にしかなっていませんね。
また、qsort()呼び出し時にキャストするのではなく、関数の型はqsort()の仕様にあわせ、
関数内でポインタをキャストした方が毎回キャストしないですむので適当だと思われます。
0267点・点・点
2005/11/01(火) 17:10:35しらべたのですが、
VC++にはボリュームラベルを書き換える関数しかありませんでした。
Cで出来るようですが、やり方が分かりません。
0268デフォルトの名無しさん
2005/11/01(火) 17:26:58#include <stdlib.h>
#include <string.h>
#define MAXDATA 3
#define MAXSTR 256
int cmp(const void * , const void *);
int main(void){
char data[MAXDATA][MAXSTR];
int i;
for(i = 0 ; i < MAXDATA ; i++)
printf("%d人目の名前 -> " , i + 1); scanf("%s" , data[i]);
qsort(data , MAXDATA , sizeof(char *) , (int(*)(const void * , const void *))cmp);
for(i = 0 ; i < MAXDATA ; i++)printf("%s\n" , data[i]);
return 0;
}
int cmp(const void *s1 , const void *s2){
return strcmp(*(char **)s2 , *(char **)s1);
}
このように変更してみましたが、やっぱりうまく動きません・・・。
qsortの比較関数を最初のままにし、二次元配列の宣言をこの状態にしたときには、
なぜかdata[0]の中身が変化してしまいました・・・。
0269デフォルトの名無しさん
2005/11/01(火) 17:54:33だからqsort()の呼び出してキャストするなって。
で、配列の配列とポインタの配列の区別がついていないようだからその辺りを勉強汁。
構造体は判るのかな?
それなら、struct foo {char data[MAXSTR];} data[MAXDATA];とでもしてソートしたら?
0270デフォルトの名無しさん
2005/11/01(火) 18:06:28> ポインタとアドレスの違いがわからない
ポインタ = アドレス(ポイント)を指すという意味
ポインタ変数 = (他の変数などの)アドレスを指す変数
アドレス = メモリ上にある変数の場所を示す番地のこと
char ch; // これはchar型変数のch。変数chのアドレスは&chで表す。
char* pch; // 他のchar型変数のアドレスを指すポインタ変数pch。
// これに他のchar型変数のアドレスを代入してから使う。
// 例
// pch = &ch;
//
// アドレス代入後にポインタ先の値を*pchとして参照する。
// 例
// *pch = '\n';
//
// あとは*pchをchar型変数chのように扱える。
//
int val; // int型変数のval。変数valのアドレスは&valで表す。
int* pval; // 他のint型変数のアドレスを指すポインタ変数pval。
// これに他のint型変数のアドレスを代入してから使う。
// 例
// pval = &val;
//
// アドレス代入後にポインタ先の値を*pvalとして参照する。
// 例
// *pval = 65535;
//
// あとは*pvalをint型変数valのように扱える。
//
0271デフォルトの名無しさん
2005/11/01(火) 18:45:040272デフォルトの名無しさん
2005/11/01(火) 18:56:070273デフォルトの名無しさん
2005/11/01(火) 20:23:46cmp関数は要らんと思う
ポインタ無しでforでグルグル回せばソートできると思うが
0274デフォルトの名無しさん
2005/11/01(火) 21:12:07せめて期待する動作くらい書こうな。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXDATA 3
#define MAXSTR 256
int cmp(const void * , const void *);
int main(void){
char data[MAXDATA][MAXSTR];
int i;
for(i = 0 ; i < MAXDATA ; i++) {
printf("%d人目の名前 -> " , i + 1);
scanf("%s" , data[i]);
}
qsort(data, MAXDATA, MAXSTR, cmp);
for(i = 0 ; i < MAXDATA ; i++) printf("%s\n" , data[i]);
return 0;
}
int cmp(const void *s1 , const void *s2)
{
return strcmp((char *)s2, (char *)s1);
}
0275デフォルトの名無しさん
2005/11/01(火) 21:58:58ブートセクタの内容
http://www.fdi.fujitsu.com/products/eFILE/j1_4.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpfileio/html/_win32_getvolumeinformation.asp
GetVolumeInformation
LPDWORD lpVolumeSerialNumber, // ボリュームのシリアル番号
デジタルコピーの著作権保護に使われるということなので、
もし変更すれば著作権がらみのファイルはコピーとみなされ、
開けなくなることになりますね。
0276デフォルトの名無しさん
2005/11/01(火) 23:30:24>>264のは「配列へのポインタ」
>>268
既に答えは出ているが、qsortの第3パラメータが間違っている。
0277デフォルトの名無しさん
2005/11/02(水) 09:18:55> ポインタ = アドレス(ポイント)を指すという意味
> ポインタ変数 = (他の変数などの)アドレスを指す変数
> アドレス = メモリ上にある変数の場所を示す番地のこと
いい加減な事言うな。
ポインタ:プログラム上で使用するオブジェクト(変数など)を指し示す値
ポインタ変数:ポインタ値を格納する為のオブジェクト
メモリアドレス:記憶領域上の位置を示す値
# ちなみに、ポインタ値=アドレス値ではない
0278デフォルトの名無しさん
2005/11/02(水) 10:25:24概念さえわかってればそんなにいきりたって区別するほどのもんでもないと思うけど
0279デフォルトの名無しさん
2005/11/02(水) 14:00:52いまいちqsort関数の引数があやふやなんだ。
第三引数に指定するのは、sizeofで求めるやつじゃないのか?
配列の型によって様々な表記をしてるから、理解するのが難しい・・・
0280デフォルトの名無しさん
2005/11/02(水) 14:31:14そこまできたら何で直接ポインタと間接ポインタの説明をしないのか?
ついでにハンドルなんかも教えてやりゃ良いのに
0281デフォルトの名無しさん
2005/11/02(水) 15:24:15NTVDM CPU は不正命令を検出しました。
とコンパイルしようとすると出ます。誰かげんいんがわかるかたいますか?
0282270
2005/11/02(水) 15:31:14> いい加減な事言うな。
それ、ほぼ同じことを言い換えてるだけにしか思えないが、変数とオブジェクトってどう違うの?
ポインタ = アドレス(ポイント)を指すという意味 = プログラム上で使用するオブジェクト(変数など)を指し示す値
ポインタ変数 = (他の変数などの)アドレスを指す変数 = ポインタ値を格納する為のオブジェクト
アドレス = メモリ上にある変数の場所を示す番地のこと = 記憶領域上の位置を示す値
> # ちなみに、ポインタ値=アドレス値ではない
ポインタ=アドレス ではないが、C言語ではポインタが持つ値としてアドレス値に限定ではないか?
>>280
それじゃ277に代わって・・・
ハンドルは、平たく言うと特定の処理システム内で規定されたルールによって割り
振られた値でして、それをプログラム内で識別や参照に用いる方法ですな。
だからハンドルの値そのものは、ただユニークに割り振られた番号だったり、或る
ハッシュ値そのものだったり、ポインタのようにアドレス値だったりもする。
ポインタのように言語仕様の規定で決められているのではなく、多くはライブラリの
仕様として決められているのが違いかな。
0283デフォルトの名無しさん
2005/11/02(水) 15:51:33> ほぼ同じことを言い換えてるだけにしか思えないが
明らかに違うだろ。
> C言語ではポインタが持つ値としてアドレス値に限定ではないか?
オフセットの場合もあるし、Windowsだと仮想アドレスだったりする。
0284デフォルトの名無しさん
2005/11/02(水) 16:08:07それがアドレスでそ?
アドレスという言葉の意味をすごーく狭く解釈していない?
0285デフォルトの名無しさん
2005/11/02(水) 17:11:27>Windowsだと仮想アドレスだったりする。
(´・∀・`)ヘー
0286デフォルトの名無しさん
2005/11/02(水) 17:37:22あとそもそもx86アーキテクチャにおいてレジスタ1本で物理アドレスを指定ことは出来ない
0287デフォルトの名無しさん
2005/11/02(水) 18:11:57そのプログラム内で確保したメモリだけ?
0288デフォルトの名無しさん
2005/11/02(水) 18:41:04リアルモードからプロテクトモードに移るとリアルモードには戻れない。
これが何を意味するかというと、windows上で動くプログラムのアドレスは、
基本的に、論理アドレスだということ。
基本的に、というのは、抜け道もあるということ、デバイスドライバとか
0289デフォルトの名無しさん
2005/11/02(水) 18:58:12Windowsがメモリ管理しているから、積んでるメモリで決まると思うんだけど。
足りなければ、Windowsが仮想メモリ使ってくれるか、マが仮想メモリを確保もできるでしょう。
ただ、Lattice-CとかのDOSプログラミングだと1M制限に掛かると思うけど、現在、仮想86モードがどうなっているのか知らない。
0290デフォルトの名無しさん
2005/11/02(水) 19:28:17じゃなく概念わかって無い奴ほど区別つけられないままなのが間違いの元で…
せっかくオブジェクトという概念で説明できる(してある)のに、
わざわざアドレスとか混同する必要も無いわな。
(オブジェクトと変数も混同するなよな)
object: region of data storage in the execution environment,
the contents of which can represenvalues
>C言語ではポインタが持つ値としてアドレス値に限定ではないか?
古のワードマシン(?ワード境界にないバイト境界からはアクセスできない)
での実装で word境界のポインタ値 2Nの次の値が 2N+1じゃなかったりするのも
あったなあ。例外が発生するような特殊な印(?tag)付だったか、
まあそんなものまでアドレスと強弁してもしょうがなかろうし。
0291デフォルトの名無しさん
2005/11/02(水) 20:37:31x86でもプロテクトモードからリアルモードへ戻れますよ。(戻れないのは286だけ)
0292デフォルトの名無しさん
2005/11/02(水) 21:25:340293デフォルトの名無しさん
2005/11/02(水) 21:31:06それ、良く覚えてたねw
リセットして切り替えるから、コンテキストも外部で自己管理という・・・
無駄にコストの掛かる方法だったな。
ってアーキテクチャはスレ違いだ。
0294デフォルトの名無しさん
2005/11/02(水) 21:51:11特権レベルによってWINDOWSがメモリ管理してるから、
プロテクトモードからリアルモードにするドライバの中でOS落としてやらないと無理(OSが正常に動かない)と思うんですけど、違ってたらごめんなさい
あと、特権命令については、ぶつかるかどうかの要因としては、関係ないと思います
0295デフォルトの名無しさん
2005/11/02(水) 21:59:53Windowsの中からリアルモードに行こうと考えているとは思わなかった。
俺はDOSへ戻る16bit Windowsの終了とかを考えていた。
0296デフォルトの名無しさん
2005/11/02(水) 22:04:54なるほど。
それなら、一昔前(いや二、三昔)のパソコンなら普通に使ってましたね。
たしかにw
0297デフォルトの名無しさん
2005/11/02(水) 22:46:120298デフォルトの名無しさん
2005/11/02(水) 23:05:30ポインタ型になっている値。
0299デフォルトの名無しさん
2005/11/02(水) 23:09:540300デフォルトの名無しさん
2005/11/03(木) 00:27:05コンパイルすると
○ printf("aiueo");
× printf("あいうえお");
なんですけど
どうしたら日本語もできるようになりますか?
0301デフォルトの名無しさん
2005/11/03(木) 00:36:240302デフォルトの名無しさん
2005/11/03(木) 00:45:23int main(void){
int i;
double d;
i=1; //平気
i=&i; //怒られる
d=i; //平気
return 0;
}
なぜ?
0303デフォルトの名無しさん
2005/11/03(木) 01:39:570304デフォルトの名無しさん
2005/11/03(木) 02:15:31ポインタ値と整数値は相互代入可能でないから、キャストで無理やり変えるか何かしないとダメ
0305デフォルトの名無しさん
2005/11/03(木) 08:06:52なぜコピー先の位置を保存しなければならないんでしょうか。
// strcpy
int strcpy(const char *s1 , const char *s2){
char *p = s1; // 位置保存
while(*p++ = *s2++);
return *s1;
}
ちょっとうろ覚えなので、あってるかどうかは自信がないですけど・・・
0306デフォルトの名無しさん
2005/11/03(木) 08:15:41最後にreturn s1;としている。
strcpy()は最初の引数を返すと定められている。
0307デフォルトの名無しさん
2005/11/03(木) 10:20:22保存といいながらpを使ってs1を使ってないから、温存というよね?
でもって返すのはchar *
0308デフォルトの名無しさん
2005/11/03(木) 20:00:54どちらがオススメですか?
0309デフォルトの名無しさん
2005/11/03(木) 20:22:52フランス語とドイツ語を比べるようなものだ
0310デフォルトの名無しさん
2005/11/03(木) 21:01:35東北弁と茨城弁を比べているようだ
0311デフォルトの名無しさん
2005/11/03(木) 21:13:03極めるとまでは行かなくとも、
人並みにポインタを使いこなせるようになるくらいはCをやった方がいいと思う。
0312デフォルトの名無しさん
2005/11/04(金) 01:43:03NULLをポインタの型に合わせてキャストするべきですか?
つまりこんな風に
char *buf;
buf = (char *)malloc(num);
→ if (buf == (char *)NULL)
return;
また、returnでNULLを返す場合はどうすべきですか?
0313デフォルトの名無しさん
2005/11/04(金) 01:50:31すべきでない。
後者
素直にNULLを返せ。
0315デフォルトの名無しさん
2005/11/04(金) 02:04:12○○が原因で、○○.exe にエラーが生じましたとなるのですが。
3次元問題を差分法で解くために、時間と含めて4次元配列をつくりましたが、メモリのことも考慮して、時間の配列要素は2つにしました。
つまり3次元分の必要メモリ数*2だけのメモリが必要なのですが。。。
0316デフォルトの名無しさん
2005/11/04(金) 02:20:29氏ねマルチ野郎
0317デフォルトの名無しさん
2005/11/04(金) 02:25:32すみません。ただ、何か少しでもいい方法がないかと思いまして。。
幾分若輩者でして...
0318デフォルトの名無しさん
2005/11/04(金) 02:28:330319デフォルトの名無しさん
2005/11/04(金) 02:42:52メモリ不足なんじゃない?
アロケートをWindowsAPIでやったら?
0320点・点・点
2005/11/04(金) 11:02:11外部シンボル 'absread(int, int, int, unsigned char)' が未解決
が出てしまいます。どうしてでしょう。
#include <dos.h>は記述してあります。
ちなみに-Wでコンパイルすると、
WinMainが未解決になります。
コンパイラはborland C++ 5.5です。
0321デフォルトの名無しさん
2005/11/04(金) 11:57:27コンパイルじゃなくて未解決ならリンク時だろ
コンパイルとリンクの違いを勉強して来い
そして、absreadが入っているライブラリファイル(〜.libって名前のファイル)をリンクしろ
0322点・点・点
2005/11/04(金) 14:31:170323デフォルトの名無しさん
2005/11/04(金) 14:37:11何か良い勉強方法ありませんか・・・?
問題用紙下のほうのでかい問題の考え方が
いまいちわからないのですが・・・。
0324点・点・点
2005/11/04(金) 15:41:04borland C++ 5.5でなくなる、
ことってありますか?
0325点・点・点
2005/11/04(金) 15:50:470326デフォルトの名無しさん
2005/11/04(金) 16:10:14そりゃありえる。
Borland C++ 5.5はWindowsで動くプログラムを作るからDOS用の関数はなくなって当然。
0327デフォルトの名無しさん
2005/11/04(金) 16:15:44リンカの設定でスタックサイズを大きくしてみたらどうだ。
0328点・点・点
2005/11/04(金) 16:18:45そうなると全てが理解できます。
http://72.14.203.104/search?q=cache:3uo6o833HvQJ:www.7880.com/info/Article-2bada40.html+dos.h+absread&hl=ja
とか
http://tutorials.programmingsite.co.uk/cabswrite.php
とか
http://www.programmershelp.co.uk/showcode.php?e=29
とか
http://lib.codenet.ru/functions/C/a/0/
とか
にも記述があるので可能性はありますね。
0329点・点・点
2005/11/04(金) 17:23:52予想通り、関数、古いバージョンにはありました!
下記のサイトにて、Borland C++ Version 3.1 を手に入れました。
http://www.mmg.tu-sofia.bg/bookhtml/web-sites/download.htm
0330点・点・点
2005/11/04(金) 18:36:16先ほどから、インストールが出来ません。
installとタイプするように書いてありますが、
うまくいきません。
だいたい、DOSでカレントをどこにおいていいのやら、、。
0331デフォルトの名無しさん
2005/11/04(金) 18:40:14というか、absreadを入れたアプリ使って何するつもりだ?Win95ですら動かないAPIを使って
0332yu
2005/11/04(金) 23:03:10{
struct t_list** g_ptr ;
struct t_list* next_list ;
} T_LIST;
typedef struct c_table
{
struct t_list*compressible_t ;
struct c_table*another_t ;
} C_TABLE ;
と、宣言をした構造体を使っています。
T_LIST型の構造体AからC_TABLE型の構造体へポインタを指定して、
そこから異なる構造体Bを指すように設計しているのですが、
うまく値を参照できません。
g_ptrの型はT_LISTなのでしょうか??
いろいろ調べたんですが、上手くできません。
どなたか、教えて下さい。お願いします
0333デフォルトの名無しさん
2005/11/04(金) 23:05:04そのg_ptrは何に使おうと思ってるの?
0334yu
2005/11/04(金) 23:28:48レスありがとうございます!
g_ptrが指す対象がいくつあるかわからないので、C_TABLE型のリストを
動的につくって、そこからつなげたいんです。
g_ptrは同じ型の(自分とは違う)構造体を指させたいんです。
0335デフォルトの名無しさん
2005/11/04(金) 23:36:31どう説明すると判ってもらえるかが難しいんだが、値自体の型とか構造体ってのを別に考えた方が良いな
手っ取り早くやるならvoid *g_ptr;にしてしまうとか
0336デフォルトの名無しさん
2005/11/04(金) 23:42:040337yu
2005/11/04(金) 23:44:25値自体の型とか構造体を別に・・・・・ですか?
でも void *g_ptr だと指定する先がvoid型の物になってしませんか??
0338デフォルトの名無しさん
2005/11/04(金) 23:47:49vod *は特別で、指している先がどんな型か問われない(== どんなものでも指せる)ポインタ型ということになっている。
0339yu
2005/11/04(金) 23:49:32そんなんあるんですか?!
初めて知りました・・・・・。
ありがとうございます! これから試してみます
0340yu
2005/11/04(金) 23:55:15'$S1' と 'void' の記述が不正です
(';' で区切られていない可能性があります)。
と出てエラーになってしまいました・・・・。
構造体ではポインタのポインタなので
指定する先の型をT_LISTとしていますが、
直接指定しているのはC_TABLEなので
そこは修正すべきなんでしょうか??
0341デフォルトの名無しさん
2005/11/05(土) 02:55:16stdio.h や stdlib.h をインクルードしていなくても
rand() で呼び出せるこの rand() 関数はどこで定義されているんですか?
0342デフォルトの名無しさん
2005/11/05(土) 08:54:24Cでは(プロトタイプ)宣言無しでも関数を呼び出すコードは書ける。
後はその関数の実体をリンクすればいい。
勿論、一部を除いて標準関数は暗黙的にリンクさせる。
0343デフォルトの名無しさん
2005/11/05(土) 13:49:040344デフォルトの名無しさん
2005/11/05(土) 18:23:52教授のぶぉけ(;o;)))))))))
0345デフォルトの名無しさん
2005/11/05(土) 18:26:150346デフォルトの名無しさん
2005/11/05(土) 23:46:11hoge...
}
こんな感じで有効な入力がなされるまで受けるようにしたいんですが
最初になされた無効な入力がstdinに残っているため無限ループに陥ってしまいます
fflush(stdin)やrewind(stdin)で自分なりにやっては見たのですが上手くいきません
どなたかご教示願います
0347デフォルトの名無しさん
2005/11/05(土) 23:58:50たとえばscanf("%*s");で次の空白類文字まで読み捨てられる。
ほかにはscanf("%*[^\n]%*c");で改行文字までを読み捨てられる。
0348デフォルトの名無しさん
2005/11/06(日) 00:02:070349デフォルトの名無しさん
2005/11/06(日) 00:11:18レスどうもです
読み飛ばしはすっかり失念してました・・・_| ̄|○
fgets+sscanfも良さそうですね。参考にしてやってみます
0350デフォルトの名無しさん
2005/11/06(日) 00:34:17そこで、サーバ上にあるテキストァイルの中身全部を、ブラウザへ出力したいのですが、どの関数を使うべきなのか判断出来ません。
fgets・fputsか、fread・fwriteのどちらかを使おうと思っているのですが、どちらが良いのでしょうか。
また、fgetc・fputc関数での1文字ずつの入出力ではアクセス速度が低下するのでしょうか。
0351デフォルトの名無しさん
2005/11/06(日) 00:36:52出力をまとめられる fwrite でいいんでは?
まとめられないなら fputc でも fputs でも使えば?
0352デフォルトの名無しさん
2005/11/06(日) 00:37:07自分で試せボケ
0353デフォルトの名無しさん
2005/11/06(日) 00:38:15おまえ優しいな
0354デフォルトの名無しさん
2005/11/06(日) 01:14:00char name[5][30];と宣言したものを
ポインタの配列で別の関数に渡したいとき
p[0] = name[0];
p[1] = name[1];
p[n] = name[n];
のようにポインタの配列に
ひとつずつ代入して、pを渡す?
もっとスマートな方法がありそうな…。
0355デフォルトの名無しさん
2005/11/06(日) 01:20:12char name[5][30];
func(name);
こういうこと?
0356354
2005/11/06(日) 01:32:36質問の意図はまさにその通りです。
以前その方法でコンパイラに怒られた記憶があったので
だめなのかと思っていました。
もう一度試してみます。
0357デフォルトの名無しさん
2005/11/06(日) 01:49:58(1000)^2とか(1000)^3で実行しても1002とか1003となってしまう。。。
誰か教えてくださいまし。
0358デフォルトの名無しさん
2005/11/06(日) 01:53:200359354
2005/11/06(日) 02:55:26もしかしてfunc内ではnameの各要素の先頭アドレスは
わからないということですか?
0360デフォルトの名無しさん
2005/11/06(日) 03:01:14>>355ではないが
char func(char arg[][30])
{
...
}
じゃダメ?
0361デフォルトの名無しさん
2005/11/06(日) 03:02:16エスパーじゃないんだから
0362354
2005/11/06(日) 03:12:38どうしてもポインタの配列がほしかったら、どっかで
pname[0] = name[0];
pname[1] = name[1];
pname[n] = name[n];
とかやるの?
0363デフォルトの名無しさん
2005/11/06(日) 03:21:360365デフォルトの名無しさん
2005/11/06(日) 03:37:440366デフォルトの名無しさん
2005/11/06(日) 03:41:29あー、必要ならやるとも。
でもそういうコードになったら負けかな、と思っている
0367デフォルトの名無しさん
2005/11/06(日) 04:56:05例えば、"ls" とか "dir" を実行して、その結果を文字列で得たいんです。
0368デフォルトの名無しさん
2005/11/06(日) 09:21:54C言語標準ではないが、
ttp://www.ncad.co.jp/~komata/c-kouza3.htm
このあたりを読むと幸せになれるかも。
0370デフォルトの名無しさん
2005/11/06(日) 20:10:09標準入力から入力を待ち受けるのではなく
直接文字列を渡すテクニックの概要を教えてください
0371デフォルトの名無しさん
2005/11/06(日) 21:31:16負の数に対しても、除算に対する商と余りを正確に出す簡単な方法はないでしょうか。
C言語: -3 / 10 == 0、-3 % 10 == -3
数学: -3 / 10 = -1、-3 % 10 = 7
つまり、数学において除算の余り r は、割る数を x として、
必ず 0 <= r < x となります。
よろしくお願いします。
0372デフォルトの名無しさん
2005/11/06(日) 21:35:050373371
2005/11/06(日) 21:36:420374デフォルトの名無しさん
2005/11/06(日) 21:44:210375デフォルトの名無しさん
2005/11/06(日) 22:21:52http://seclan.dll.jp/c99d/c99d05.htm#dt19990607
最新のC99ではこのように定められているが、
ほとんどのコンパイラはこのC99に対応していないので、どのような結果になるかは処理系依存。
ちなみに標準関数div()とldiv()が返す商と余りは以前からこのC99の除算・剰余演算子と同じ挙動となるように定められている。
そして数学の定義にどうやって合わせるかに答えられるような高度な話が出来るやつはこのスレにはいない。
0376デフォルトの名無しさん
2005/11/06(日) 22:26:450は0
-1は0
-3は111
7は111
2進法に直せばおのずとどうすれば良いかわかるだろ(俺は2進法のアルゴ知らんが)
割られる数が正のとき〜負のとき〜とすれば良いんじゃないかな
0377デフォルトの名無しさん
2005/11/06(日) 22:46:09先を越されたが、C99規格(ISO/IEC 9899:1999)には
When integers are divided, the result of the / operator is the algebraic
quotient with any fractional part discarded. 87)
-----------------------------------------------------------
87) This is often called “truncation toward zero”.
とある(>>375の仰る通り)。と言う事だから、次のようにするのが分かりやすい
かも知れない。高速かどうかは別にすれば。
#include <math.h>
int math_quotient(int a, int b) {return floor((double)a / b);}
int math_mod(int a, int b) {return a - b * math_quotient(a, b);}
余談だが、C++規格(ISO/IEC 14882:1998)ではオペランドが共に非負数で
あるとき以外はimplementation-definedになっている。
0378デフォルトの名無しさん
2005/11/06(日) 23:11:38コンパイラは何を使えばいいのでしょうか?
+初心者講座のHPも知りたい
0379367
2005/11/06(日) 23:20:43Linux なら、gcc。
Windows なら、MinGW か BCC。
ググったら、↓がトップだったからそれでいいんじゃね?
ttp://www.kumei.ne.jp/c_lang/
0380379
2005/11/06(日) 23:21:500381デフォルトの名無しさん
2005/11/06(日) 23:23:560382デフォルトの名無しさん
2005/11/06(日) 23:28:58ネットワークプラグインとかってあるんですか?
0383デフォルトの名無しさん
2005/11/06(日) 23:33:14c言語ではプラグインの事をライブラリって言うんですか?
0384デフォルトの名無しさん
2005/11/06(日) 23:35:35「プラグイン」という概念はC言語のものではなく、「プラグイン」と
「ライブラリ」は異なる。
0385デフォルトの名無しさん
2005/11/06(日) 23:36:36いいえ。
>>383
いいえ。
0386デフォルトの名無しさん
2005/11/06(日) 23:40:12ってことですね。
ライブラリは一体何者・・・・・?まぁ、どうでもいいや。
3Dゲーム作りたいのですが、
この↓ライブラリを使えばいいのですかぁ?
ttp://www5d.biglobe.ne.jp/~ochikko/easy3d.htm
0387デフォルトの名無しさん
2005/11/06(日) 23:45:200388デフォルトの名無しさん
2005/11/06(日) 23:49:290389デフォルトの名無しさん
2005/11/07(月) 00:03:33好きなライブラリ使ってもいいし、自前で書いてもいいし。
0390デフォルトの名無しさん
2005/11/07(月) 19:31:29おそらくメモリの関係だと思うのですが、三次元の配列で100*100*100の計算ってメモリが限界に達するほど大きな計算でしょうか?
何か効率よくする方法があれば教えてください。
ちなみに、配列の型はdoubleです。
0391デフォルトの名無しさん
2005/11/07(月) 19:37:38doubleが4バイトの環境だと仮定しても高々4MB
0392デフォルトの名無しさん
2005/11/07(月) 19:40:18自分でもそんなに大した量の計算ではないと思っているのに、どの計算機で試してもエラーが帰ってきます。
試しにソースアップするのでどこが悪いか見ていただけませんか?
0393デフォルトの名無しさん
2005/11/07(月) 19:41:49とりあえず貼ってみれ
0394392
2005/11/07(月) 19:43:30#define N 50 /*立方体である3次元の系のそれぞれの辺の長さに値する*/
int main(void)
{
int t,tmax,j,k,l;
float T0[N][N][N],T1[N][N][N];
FILE *output;
output=fopen("output.data","w");
/*時間的にどれくらい経過させるかを最大繰り返し回数として入力。*/
printf("最大繰り返し回数を入力。\n");
scanf("%d",&tmax);
/*初期条件として全体の温度100*/
for(j=0;j<N;j++) {
for(k=0;k<N;k++){
for(l=0;l<N;l++){
T0[j][k][l]=100.0;
}
}
}
0395392
2005/11/07(月) 19:44:12for(t=0;t<tmax;t++) {
/*境界条件として回りの温度0*/
for(j=0;j<N;j++) {
T0[j][j][0]=0.0;
T0[j][j][N-1]=0.0;
T0[0][j][j]=0.0;
T0[N-1][j][j]=0.0;
T0[j][0][j]=0.0;
T0[j][N-1][j]=0.0;
}
for(j=1;j<N-1;j++) {
for(k=1;k<N-1;k++){
for(l=1;l<N-1;l++) {
T1[j][k][l]=T0[j][k][l]+0.25*(T0[j+1][k][l]+T0[j-1][k][l]+T0[j][k+1][l]+T0[j][k-1][l]
+T0[j][k][l+1]+T0[j][k][l-1]-6.0*T0[j][k][l]);
}
}
}
0396392
2005/11/07(月) 19:45:25for(t=0;t<tmax;t++) {
/*境界条件として回りの温度0*/
for(j=0;j<N;j++) {
T0[j][j][0]=0.0;
T0[j][j][N-1]=0.0;
T0[0][j][j]=0.0;
T0[N-1][j][j]=0.0;
T0[j][0][j]=0.0;
T0[j][N-1][j]=0.0;
}
for(j=1;j<N-1;j++) {
for(k=1;k<N-1;k++){
for(l=1;l<N-1;l++) {
T1[j][k][l]=T0[j][k][l]+0.25*(T0[j+1][k][l]+T0[j-1][k][l]+T0[j][k+1][l]+T0[j][k-1][l]
+T0[j][k][l+1]+T0[j][k][l-1]-6.0*T0[j][k][l]);
}
}
}
0397392
2005/11/07(月) 19:48:39for(k=1;k<N-1;k++) {
/*時間的に過去の情報は破棄するためと、この時間的forループの計算のために配列Tのデータ処理*/
for(j=1;j<N-1;j++) {
for(l=1;l<N-1;l++){
T0[j][k][l]=T1[j][k][l];
}
}
}
}
0398392
2005/11/07(月) 19:49:31/*最終結果には境界条件である温度0の情報がはいってないため、ここで計算する。*/
for(j=0;j<N;j++) {
T1[j][j][0]=0.0;
T1[j][j][N-1]=0.0;
T1[0][j][j]=0.0;
T1[N-1][j][j]=0.0;
T1[j][0][j]=0.0;
T1[j][N-1][j]=0.0;
}
for(j=0;j<N;j++) {
for(k=0;k<N;k++) {
for(l=0;l<N;l++){
fprintf(output,"%d %d %d %f\n",j,k,l,T1[j][k][l]);
}
}
}
fprintf(output,"\n");
return 0;
}
0399デフォルトの名無しさん
2005/11/07(月) 19:51:350 0 0 0.000000
0 0 1 0.000000
0 0 2 0.000000
(中略)
43 47 41 -81.906128
43 47 42 329.925537
こんな感じのファイルが出力されて正常終了したぞ
0401デフォルトの名無しさん
2005/11/07(月) 19:58:19とりあえずstatic floatにしてみたら?
0402392
2005/11/07(月) 20:01:09出来ました!! staticは、関数内の情報が保存されるくらいの知識しかなくて、このmain関数内には別の関数を用意していないのに、staticを加えただけで実行できたのはなぜでしょうか!?
0403デフォルトの名無しさん
2005/11/07(月) 20:02:32動的確保(malloc)に帰結する。
0404392
2005/11/07(月) 20:04:30ただ、後になってメモリの解放を忘れていますとのメッセージが表示されたのですが、
static関数を用いる以外に何かプログラムに書き込む必要があるのでしょうか?
0405デフォルトの名無しさん
2005/11/07(月) 20:10:06staticな変数は静的データ領域に、そうでない変数はスタックに蓄えられる。
0406デフォルトの名無しさん
2005/11/07(月) 20:16:370408デフォルトの名無しさん
2005/11/07(月) 20:35:06いつまでもうるせえよ
0409デフォルトの名無しさん
2005/11/07(月) 20:53:55メモリの解放は動的メモリに対して必要。
staticは静的という意味でメモリの解放とは無縁。
0410392
2005/11/07(月) 21:11:42本当に何回もすみません。
では、main関数内でstatic変数を指定すると(上の例でいうと、static float...)、メモリが解放されないから、
結局staticを使わない場合と変わらないような気もするんですが、実際にはstaticを加えることにより、Nの値を大きくして計算が出来るようになったのはなぜでしょうか?
0411デフォルトの名無しさん
2005/11/07(月) 21:13:49ヒント:セグメント
0412デフォルトの名無しさん
2005/11/07(月) 21:16:10静的変数はローカル変数が使うスタックとは別領域に置かれる。
だからスタックの大きさとは無縁になれる。
0413デフォルトの名無しさん
2005/11/07(月) 23:56:10そしてstatic変数の寿命は、プロセスと一緒だからプログラム上で
管理しなくていい。
0414デフォルトの名無しさん
2005/11/08(火) 00:03:56管理しなくていい。
0415デフォルトの名無しさん
2005/11/08(火) 01:02:26おい
0416デフォルトの名無しさん
2005/11/08(火) 01:05:19まぁいまどきのたいていのOSではそのとおりではある
だからといって管理しなくていいかどうかは別問題なのだが(そしてフレーム合戦へ)
0417デフォルトの名無しさん
2005/11/08(火) 01:21:110418デフォルトの名無しさん
2005/11/08(火) 11:15:55コードレビューあり→する
次回リリースも付き合う→する
今回でサヨナラ→しない
0419デフォルトの名無しさん
2005/11/09(水) 12:26:27char a[]="abcdef";
char b[10];
void cpy(char *a,char *b)
{
while(*a != 0x00){
*b=*a;
a++;
b++;
}
*b=0x00;
}
ポインタを使ってBにAをコピーするのですが
bcdefと(a[1])からb(b[0])にコピーするにはどうすればいいでしょうか
(*a)++ではなく
0420デフォルトの名無しさん
2005/11/09(水) 12:34:41で
0421デフォルトの名無しさん
2005/11/09(水) 12:34:52cpy(a+1,b);
0423デフォルトの名無しさん
2005/11/09(水) 13:32:39等しくなければ、
z = x(x+y) / y(x-y)
の値を計算し、二つの実数が等しければ、
z = y / x(x+y)
を計算するようなプログラムを書きなさい。
と言う宿題がでてとりかかったんですが、なんどやってもエラーが起きます。
どなたか添削お願いします。
#include <stdio.h>
main()
{
int x,y,z;
printf("x=> "); scanf("%d",&x);
printf("y=> "); scanf("%d",&y);
if (x != y){
z = x*(x+y) / y*(x-y);
printf("z= %d\n",z);
}
else{
z = y / x*(x+y);
printf("z= %d\n",z);
}
return(0);
}
0424デフォルトの名無しさん
2005/11/09(水) 13:43:130425デフォルトの名無しさん
2005/11/09(水) 13:43:540426デフォルトの名無しさん
2005/11/09(水) 13:59:49>なんどやってもエラーが起きます。
エラー名くらいかいてください。
>x*(x+y) / y*(x-y)
→x*(x+y) / (y*(x-y))
0427デフォルトの名無しさん
2005/11/09(水) 14:17:00無事解決しました。ありがとうございます。
0428デフォルトの名無しさん
2005/11/09(水) 19:47:01共用体の存在価値は?
0429デフォルトの名無しさん
2005/11/09(水) 19:52:48いつかわかるときがくる。
そのときにでも思い出せばいい。
0430デフォルトの名無しさん
2005/11/09(水) 20:37:47しかし共用体の存在価値はどうしても知りたい
0431デフォルトの名無しさん
2005/11/09(水) 23:17:30バカとハサミは使いよう。
そう思ってる限り、藻前にとって役に立つ事はない。
0432デフォルトの名無しさん
2005/11/10(木) 00:07:26因みにx,yはint型で、要素数は、A[5][5]です。
0433デフォルトの名無しさん
2005/11/10(木) 00:10:466 7 8 略
こんな感じか?それなら↓
for (int i=0;i<5;i++)
printf("%d %d %d %d %d\n", a[i][0], a[i][1], 略, a[i][4]);
要C99、ANSI-Cなら何処かでカウンタを宣言してくれ
0434デフォルトの名無しさん
2005/11/10(木) 05:07:47for(y=0;y<5;y++){
printf("%2d ",A[x][y]);
}
printf("\n");
}
0435デフォルトの名無しさん
2005/11/11(金) 17:55:10多次元配列:モデル化した結果が多次元行列だった場合に1:1に実装できる
共用体:あるアルゴリズムではA、別のアルゴリズムではBと言う様に用途によって変わるデータ構造を実現する場合につかう。
メモリにマッピングして使うようなI/Oデバイスの場合、モードによって制御レジスタの構成が変わる時がある。そういう状態をそのまま実装できる。
他の言語と違い、自由にポインタが扱え、またキャストで比較的別の型への行き来が楽なC言語ではあまりメリットは感じないが、そうでない言語は共用体が無いとそういうデータ構造を実現できない。
0436デフォルトの名無しさん
2005/11/11(金) 19:32:46自作関数の中で自作関数を作ることはできますか?
0437デフォルトの名無しさん
2005/11/11(金) 19:38:32できない。
他のファイルから見えないstatic関数で我慢しろ。
0438デフォルトの名無しさん
2005/11/11(金) 19:39:270439デフォルトの名無しさん
2005/11/11(金) 20:04:07そうですか。ありがとうございます。
0440デフォルトの名無しさん
2005/11/11(金) 20:21:03UnixだとCtrl+Dですが・・・
0441デフォルトの名無しさん
2005/11/11(金) 22:43:110442デフォルトの名無しさん
2005/11/11(金) 23:49:16別に難しくはないけど、無駄に時間がかかるだろ。
数個先の要素にすぐにアクセスとかできないし。
0443デフォルトの名無しさん
2005/11/11(金) 23:59:080444デフォルトの名無しさん
2005/11/12(土) 00:08:51無限に走り続けるプログラムtest.c というものを作り,
実行可能なプログラムにtest という名前をつけ,これをバックグ
ラウンドで走らせ,そのプロセスを殺すこと.必ず,実行結果を
書くこと.プログラムを示すことは必要でない.
0445京子
2005/11/12(土) 00:34:32ジャンプするページを変えるには、
どのようなプログラムを組めば良いのでしょうか?
例えば、
チェックが0〜5個だと、Aページへジャンプ。
チェックが、6〜10個だと、Bページへジャンプとか、
そういう感じです
0446デフォルトの名無しさん
2005/11/12(土) 00:38:210447441
2005/11/12(土) 05:13:02普通はシェルソートって配列を使ってつくるもの?
0448デフォルトの名無しさん
2005/11/12(土) 11:57:21シェルソートは番号で指定された要素へ参照する際のコストがO(1)なのを前提とした場合にO(n^2)にしてる
要素への参照がO(n)だとするとO((2n)^2)になるって考え方で合ってるかな?
0449デフォルトの名無しさん
2005/11/12(土) 14:32:24O((2n)^2)=O(n^2)
0450デフォルトの名無しさん
2005/11/12(土) 19:51:34知識とかまったくないんです。
なにかまずこの本で基本勉強しろ!ってのあったら教えてください
0451デフォルトの名無しさん
2005/11/12(土) 20:06:10cgiをCでならここでもいいかもしれない。
掲示板を設置なら板違い。
ネット関係 web制作管理
cgi全般なら
ネット関係 webプログラミング
以上知らない単語があればググレ
0452デフォルトの名無しさん
2005/11/12(土) 21:16:34とりあえず command prompt
って入力してみたら
なんかヘンになった。
だいじょぶかこりゃ。
0453デフォルトの名無しさん
2005/11/13(日) 19:12:010454デフォルトの名無しさん
2005/11/13(日) 19:13:31ttp://www.linux.or.jp/JM/index.html
一覧で見たけりゃK&Rの巻末付録に付いてる
0455デフォルトの名無しさん
2005/11/14(月) 01:59:13乱数を使って配列の中身を交換して上から引いていく
乱数で一枚選んできて、使用済みならもう一回乱数を使う
この二つに違いはあるんでしょうか
0456デフォルトの名無しさん
2005/11/14(月) 02:20:21数学板にでも行け。
0457デフォルトの名無しさん
2005/11/14(月) 02:48:42速度とか無視して乱数のみに関する話なら、違いは無い
0458デフォルトの名無しさん
2005/11/14(月) 03:40:36C言語的に考えると、上はカードの配列かindexの配列をソートする事になりカード枚数分の記憶領域が必要だが、下の場合はビット演算を使う事で必要な記憶領域を減らす事が出来る。
制限のある環境で作成する場合はそういうやり方もあると知っていると役に立つ事もある。
0459デフォルトの名無しさん
2005/11/14(月) 11:44:11#include<stdio.h>
void main(){
int i;
for(i=0;i<10;i++){
printf("%d",i);
}
}
と
#include<stdio.h>
void main(){
int i;
for(i=0;i<10; ){
printf("%d",i);
i++;
}
}
ってぇのはどー違うんですか?
何で下のプログラムはi++が外に出てるのでしょうか?
お願いします(ペコリ
0460デフォルトの名無しさん
2005/11/14(月) 11:46:23特に違いはない
ただ「普通は上の書き方だけど、下の書き方もできるよ」程度
0461デフォルトの名無しさん
2005/11/14(月) 11:47:13for(i=0;i<10;i++){
printf("%d",i);
}
は、
i = 0;
for (; i < 10;) {
printf("%d", i);
++i;
}
と同じ。
#余計混乱してもしらね。
0462デフォルトの名無しさん
2005/11/14(月) 13:20:41参考になりました
ありがとうございます
0463デフォルトの名無しさん
2005/11/14(月) 13:57:49ご親切にありがとうございます。
0464デフォルトの名無しさん
2005/11/14(月) 21:05:43最初のトコに
#include<stdio.h>
void main(){
って書いてある場合と
#include<stdio.h>
int main(void){
って書いてある場合がありますが、これも同じような意味なんでしょうか?
本にはコンパイラが云々って書いてあったんですけどよくわからなくて。。
宜しくお願いします。
0465デフォルトの名無しさん
2005/11/14(月) 21:17:26後者は規格で定められた形式の1つなので、
他のコンパイラでも動くという保障がある。
つまり移植性がある。
というわけでint main(void)の方が一般的。
0466デフォルトの名無しさん
2005/11/14(月) 21:53:09exeファイルを実行すると一瞬だけ画面に現れて消えてしまいます。何が原因でしょうか?
0467デフォルトの名無しさん
2005/11/14(月) 22:05:35コマンドプロンプトの中で動かすプログラムだから。
スタートメニューの中のコマンドプロンプトを起動して、
その中でEXEを呼び出せ。
0468デフォルトの名無しさん
2005/11/14(月) 22:17:27ありがとうございます!おかげで解決しました。
0469デフォルトの名無しさん
2005/11/14(月) 22:41:16成る程、ありがとうございます!!!(*´∀`)
0470デフォルトの名無しさん
2005/11/15(火) 10:53:120471デフォルトの名無しさん
2005/11/15(火) 11:02:460472デフォルトの名無しさん
2005/11/15(火) 11:04:54確かまだ配布してたような
0473デフォルトの名無しさん
2005/11/15(火) 12:21:240474デフォルトの名無しさん
2005/11/15(火) 13:37:49コンパイラです。つーか寧ろ、IDEです。
0475デフォルトの名無しさん
2005/11/15(火) 13:53:240476デフォルトの名無しさん
2005/11/15(火) 14:03:19IDEってケーブルがあるんですか?
0477デフォルトの名無しさん
2005/11/15(火) 14:07:160478デフォルトの名無しさん
2005/11/15(火) 14:09:27それはケーブルの名前ではありません。ハードディスクを制御するための規格の名前です。
0479デフォルトの名無しさん
2005/11/15(火) 14:50:160480デフォルトの名無しさん
2005/11/15(火) 15:03:010481デフォルトの名無しさん
2005/11/15(火) 15:08:56教えて!
検索してもハードディスクのことしか出てこない。。。
0482デフォルトの名無しさん
2005/11/15(火) 15:17:17でググれ
0483デフォルトの名無しさん
2005/11/15(火) 15:43:08C言語の勉強に買おうと思っているんですけど。
0484デフォルトの名無しさん
2005/11/15(火) 16:13:100485デフォルトの名無しさん
2005/11/15(火) 16:18:390486デフォルトの名無しさん
2005/11/15(火) 16:31:16目的を最初から書けば回答に素早く辿り着けたものを……
おまいら!今日からC言語を学んでいくぞー!パート2
http://pc8.2ch.net/test/read.cgi/tech/1128637438/275
freeでいいコンパイラあったら書き込むスレ1
http://pc8.2ch.net/test/read.cgi/tech/1103285844/35
0487デフォルトの名無しさん
2005/11/15(火) 16:40:35回りくどくてすいません。
でも優しく応対してくれて感謝しています。
今日この板初めてきたもので助かります。
ありがとうございます。、
0488デフォルトの名無しさん
2005/11/15(火) 17:02:03ありがとうございました。
0489デフォルトの名無しさん
2005/11/15(火) 18:25:47http://pc8.2ch.net/test/read.cgi/gamedev/1005038080/
0490デフォルトの名無しさん
2005/11/15(火) 19:00:06を取り出して、それを小さい順に表示するプログラムを作りなさい。
例えば、MOJI[]="9B2C3ADC31" ならば 12339 と表示する。
と
「問題6/上級]次の問題の中から、どれか1つを選び、プログラムを作成して答えを
求めなさい。
(問題6−1)太郎君が9歳になるまで,花子さんの年齢が太郎君の年齢の整数倍にな
る年がちょうど7回ある。このとき、太郎君と花子さんの年齢差はいくつか?
解答ヨロシクお願いします。自分お手上げです(泣
0491デフォルトの名無しさん
2005/11/15(火) 19:02:58問4) ctype.hとstdlib.h使え
0492デフォルトの名無しさん
2005/11/15(火) 19:25:180493デフォルトの名無しさん
2005/11/15(火) 20:51:110494デフォルトの名無しさん
2005/11/15(火) 21:15:41うるう年に生まれてたら年齢は普通の人の1/4になるし
0495デフォルトの名無しさん
2005/11/15(火) 21:20:20>うるう年に生まれてたら年齢は普通の人の1/4になるし
ネタ乙。
0496デフォルトの名無しさん
2005/11/15(火) 21:34:302月29日生まれの人が普通の人の1/4しか年を取らない。
0497デフォルトの名無しさん
2005/11/15(火) 21:50:13何かで定めていなかったっけ。
某ゲームじゃ、2/30が誕生日のやつとかいるし。
0498デフォルトの名無しさん
2005/11/15(火) 22:01:54何で定められてるの?
0499デフォルトの名無しさん
2005/11/15(火) 22:08:32従って、2/29生まれは2/28の24時に歳をとることになる。
このため、4/1生まれは3/31に就学年齢に達することになるので、早生まれとなる。
0500デフォルトの名無しさん
2005/11/15(火) 22:35:540501デフォルトの名無しさん
2005/11/15(火) 23:07:14年齢計算ニ関スル法律 - Wikipedia
http://ja.wikipedia.org/wiki/%E5%B9%B4%E9%BD%A2%E8%A8%88%E7%AE%97%E3%83%8B%E9%96%A2%E3%82%B9%E3%83%AB%E6%B3%95%E5%BE%8B
0502デフォルトの名無しさん
2005/11/16(水) 00:12:01でDLして早速コンパイルしてみると、どれをやっても
エラー E2268 hahuman3.cpp 19: 未定義の関数 'exit' を呼び出した(関数 main(int,char * *) )
と出てしまいます。なぜ、exitが関数扱いされているかわからず動かないので困りました。
どうすれば、直るのでしょうか?
0503デフォルトの名無しさん
2005/11/16(水) 00:33:41exit()は明らかに関数
0504502
2005/11/16(水) 00:59:55そうだったんですか。なんとなく終了させたいときにexit使ってましたが関数なのですね。
でも、他のexit含んだプログラムではこんなエラーがでないんですがなぜなのでしょうか?
0505デフォルトの名無しさん
2005/11/16(水) 01:01:500506デフォルトの名無しさん
2005/11/16(水) 01:02:280507デフォルトの名無しさん
2005/11/16(水) 01:22:50お二方の言うとおり、#include<stdlib.h>のし忘れだったようです。無事コンパイルできました。
後はコマンドプロンプトで起動するようなので、そちらの使い方を学んでから使ってみます。
ありがとうございましたm(_ _"m)
0508デフォルトの名無しさん
2005/11/16(水) 08:54:33引用開始
float型の変数に値を代入する時
float a;
a = 1.5;
とすると、コンパイラが警告を発します。
これは、単に「1.5」と書くとdouble型の1.5であると解釈されるからです。
float型の変数よりも大きなサイズのdouble型の数値を代入しようとしているとコンパイラが判断して
「おい、おい、危ないぞ!」と警告を発しているのです。
引用ここまで
の記述があるのですが、
float a;
a = 1.5;
のどこに問題があるのか理解できません。
わかりやすく教えてください。
0509デフォルトの名無しさん
2005/11/16(水) 09:41:34>「おい、おい、危ないぞ!」と警告を発しているのです。
って書いてあるじゃん
こちとら、そんなの分かってて代入するんだい!
という場合は、
a = (float)1.5;
a = 1.5f;
0510デフォルトの名無しさん
2005/11/16(水) 10:32:02インクルードするヘッダはどっちに書くべきなんでしょうか?
0511デフォルトの名無しさん
2005/11/16(水) 10:42:060512デフォルトの名無しさん
2005/11/16(水) 10:50:39ごめん、それだけじゃ助けようがない。
0513デフォルトの名無しさん
2005/11/16(水) 11:21:320514デフォルトの名無しさん
2005/11/16(水) 12:24:40includeの動作から勉強し直せ。
Cソースをincludeすることも可能だぞ。
0515デフォルトの名無しさん
2005/11/16(水) 15:13:44ハハ、私は来週の月曜にテスト
C言語難しいよ〜
0516デフォルトの名無しさん
2005/11/16(水) 15:25:03値を入れようとするとエラーになります。
なぜでしょうか?
__gc struct ts{
int num;
}*pTs[];
pTs = new ts*[64];
pTs[0]->num=1;
0517デフォルトの名無しさん
2005/11/16(水) 15:26:35文法がおかしいから
0518デフォルトの名無しさん
2005/11/16(水) 15:36:33文法がおかしいの?
コンパイラではエラーでないけど・・・orz
デバッグでみるとpTs[0]->numは存在しませんになる。
確保できてないのか?
0519デフォルトの名無しさん
2005/11/16(水) 15:46:43一応アルゴリズムの本は読んでるんだが・・・。
0520デフォルトの名無しさん
2005/11/16(水) 15:50:40他人の書いたプログラムを読んでみる。
設計法を学ぶ(仕様書)
0521デフォルトの名無しさん
2005/11/16(水) 15:59:440522デフォルトの名無しさん
2005/11/16(水) 16:02:340523デフォルトの名無しさん
2005/11/16(水) 16:59:08C言語でプログラミングという課題を預かってますが、どうしたらよいのかさっぱりわかりません。
開発環境はWindowsなんですけど・・・
0524初心者C
2005/11/16(水) 17:54:08なので、#ifdef等でコンパイル時に切り分けをして、ソースを共通にできればよいなと考えたのですが
どうにもうまいやり方がわかりません。
ソースを別ファイルにして、#include すればできそうですが、それだと可視性がわるくなるので気が進みません。
以下のような感じで、記述する方法はあるでしょうか。
void A(){
?
}
void B(){
?
}
共通のソース
{
#ifdef AAA
・・・
#endif
#ifdef BBB
・・・
#endif
}
0525デフォルトの名無しさん
2005/11/16(水) 18:25:23手続きを見直して可能な限り共通の処理を1か所にまとめ、
別関数に切り分ける。
0526デフォルトの名無しさん
2005/11/16(水) 20:06:430527デフォルトの名無しさん
2005/11/16(水) 20:08:08516のコードではポインタの配列を確保してpTsへ代入しているだけ。
pTs[0]〜pTs[63]までの個々の要素はどこも指していない。
単にts型の配列を作りたいだけなら、
ts *pTs;
pTs = new ts[64];
pTs[0].num = 1;
本当にポインタの配列が欲しいのなら、
ts *pTs[] = new ts*[64];
pTs[0] = new ts;
pTs[0]->num = 1;
(こっちだとC#でいうジャグ配列を再現できる)
0528デフォルトの名無しさん
2005/11/16(水) 20:27:13fflush()を使うようなプログラムは望ましいものではないと思うんですが
そうでしょうか?
0529デフォルトの名無しさん
2005/11/16(水) 20:31:040530デフォルトの名無しさん
2005/11/17(木) 00:02:11根拠を書け。
#まぁ、反駁するだけだが。
0531デフォルトの名無しさん
2005/11/17(木) 00:09:51処理系に依存するので移植性がないのではないでしょうか?
0532デフォルトの名無しさん
2005/11/17(木) 00:13:010533デフォルトの名無しさん
2005/11/17(木) 00:13:540534デフォルトの名無しさん
2005/11/17(木) 00:15:300535デフォルトの名無しさん
2005/11/17(木) 00:16:570536デフォルトの名無しさん
2005/11/17(木) 01:47:46getc
fgetc
などで文字が入力バッファにたまってしまって、
fflush(stdin)でもフラッシュできないときってどうしたらいいんでしょうか?
0537デフォルトの名無しさん
2005/11/17(木) 01:51:59前に俺が何処かのスレで似たようなこと聞いたときに教えて貰った方法だが
scanf("%*[^\n]");で次の改行文字直前まで捨てる
scanf("%*c");で改行文字を含めて1文字捨てる
もしくは適当なバッファ確保してfgetsで放り込む
0538デフォルトの名無しさん
2005/11/17(木) 01:52:27使うべきではない
0539デフォルトの名無しさん
2005/11/17(木) 01:52:280540デフォルトの名無しさん
2005/11/17(木) 01:57:57C言語超ムズい。いやだいやだ。
0541デフォルトの名無しさん
2005/11/17(木) 02:04:44ども。配列とかでバッファを確保しないやり方だと、scanfと代入抑止文字使うしかないんですね。�d
0542デフォルトの名無しさん
2005/11/17(木) 02:19:59別にこれでもいいと思うが・・・
0543デフォルトの名無しさん
2005/11/17(木) 02:36:36whileの中だったのでwhile使うことまで思いつきませんでした�d
0544デフォルトの名無しさん
2005/11/17(木) 04:33:510545デフォルトの名無しさん
2005/11/17(木) 08:21:31こうしなきゃダメか
0546デフォルトの名無しさん
2005/11/17(木) 14:31:450547デフォルトの名無しさん
2005/11/17(木) 17:31:320548デフォルトの名無しさん
2005/11/17(木) 17:39:32プログラムがロードされた辺りじゃないかな?
0549デフォルトの名無しさん
2005/11/17(木) 18:32:02「device=%SystemRoot%\system32\ANSI.SYS」をconfig.NTに追加して、
system32の方のプロンプトに直接エスケープシーケンスを書き込んで機能させるところまでできたのですが・・・。
#include<stdio.h>
#include<time.h>
#include<conio.h>
main()
{
time_t timee;
struct tm *timee2;
char *timee3;
while(!kbhit()){
time(&timee);
timee2 = localtime(&timee);
timee3 = asctime(timee2);
printf("\x1b[4;1H");
printf("現在時刻:%s", timee3);
}
return 0;
}
ESC部分は、¥0x1b、¥x1b、で試しました。
よろしくお願いします。
0550デフォルトの名無しさん
2005/11/17(木) 18:39:41config.ntは16bit DOSプログラム用。
32bit プログラムではconfig.ntは使われない。
代わりにWinAPIでやるしかない。
0551デフォルトの名無しさん
2005/11/17(木) 19:26:45rand関数って同一値が生成されることってあるんですか?
0552デフォルトの名無しさん
2005/11/17(木) 19:28:010553549
2005/11/17(木) 19:33:50winAPIについて少し調べたのですが、これはDOSではなくWINDOWSプログラミングですか?
まだDOSプログラムもロクにできませんが、
WINDOWSプログラムの勉強に切り替えても大丈夫ですか?
知識のレベルは、基本情報取得程度で、
Cについては猫サイトを40まで読み、簡単な用語を理解している程度です。
0554デフォルトの名無しさん
2005/11/17(木) 19:37:47Win32APIはCとは全くの別物と考えた方がいい
とりあえず推薦図書スレ見てこい
0555549
2005/11/17(木) 19:46:57けど、Cを勉強する上で必要な知識なんですよね?
ありがとうございました!
早速見てきます。
0556デフォルトの名無しさん
2005/11/17(木) 20:01:47いや、そういうわけではない。
単にWindows固有のことを行いたければWinAPIが必要というだけ。
猫でもを読んでいるのなら、エスケープシーケンスの章は飛ばしてしまえ。
どうせエスケープシーケンスもDOS固有のものであってCとは全く関係ない。
#ちなみに猫では後の章でWinAPIで文字色を変える方法が出てくるから、待っていろ。
0557549
2005/11/17(木) 21:36:57レスありがとうございます。
迷走してきました。
正直よくわからなかったんですけど、
日本人の本より洋書の翻訳版のほうがいいみたいですね。
立ち読みしてて、読みづらかったんで却下してましたよ・・・。
原書が存在してる以上、英語も覚えないといけないんでしょうね・・・。
マジメに勉強しておけばよかった・・・。
猫にあるんですか?
それならそれを今からやってから、明日本屋にいくことにします。
推薦に出てたやつを中心にして、2時間ほど嫌がらせを。
ジュンク堂なんで、誰も文句言いませんけど。
0558549
2005/11/17(木) 22:09:25見たことのあるDOSで使ってた関数とwindouwsで使うはずの謎のtypedefされたデータ型がならんでますね・・・。
今自分がなんのプログラミングしてるのかわからなくなりそうですよ・・・。
SDKっていうのも必要みたいですし・・・。
けど、調べるべきことは絞れました。
本屋にはいい感じで行けそうです。
ありがとうございました!できたら報告しにきます。
0559デフォルトの名無しさん
2005/11/17(木) 22:50:24そうそう、それそれ。
そこらへんまでくると、もはやC言語編というのは名前だけで、
実態は単なるWinAPI編(ウィンドウなどが絡まないもの)となっている。
0560デフォルトの名無しさん
2005/11/17(木) 22:52:07ちなみにSDKというのはVC++(製品版)やBCB/BCC(無料版)などなら付属しているので、改めて入手する必要はない。
0561デフォルトの名無しさん
2005/11/17(木) 23:23:21のC言語入門とC++入門でC→C++と勉強しようと思うんだけど、
ここで勉強するのってお薦め?それとも推奨しない?
0562デフォルトの名無しさん
2005/11/18(金) 00:23:001.いわゆるファイルスコープを持つ変数
2.1に加えてヘッダファイルにextern宣言し、ファイルをまたいで使える変数
のどちらでしょうか。
私は多分1のことだと思うのですが(つまり2はさらに罪が深い)、グローバル
変数を使わないようにする方法がわからないのです。
ソースファイル分割をまとまった機能ごとに行う場合、機能として保持する必要のある
情報はどうしてもグローバルにせざるを得ないと思うのですが。
例えば、通信で受け取った受信フレームの内容や機能のステータスなどです。
まあ2については、extern関数でラップして受け渡せばいいので完全になくせる
とは思いますけど。
0563デフォルトの名無しさん
2005/11/18(金) 00:23:240564デフォルトの名無しさん
2005/11/18(金) 00:27:10>CとC++はプログラマを目指す人には憧れであり、絶対に通らなければならない言語です
うわぁ〜…、のっけからイっちゃってるよ…。
0565デフォルトの名無しさん
2005/11/18(金) 00:30:48程度にもよるけど。
0566デフォルトの名無しさん
2005/11/18(金) 00:40:53グローバル変数は通常後者。
前者は、関数外でstatic指定された変数だろ。
> ソースファイル分割をまとまった機能ごとに行う場合、機能として保持する必要のある
> 情報はどうしてもグローバルにせざるを得ないと思うのですが。
> 例えば、通信で受け取った受信フレームの内容や機能のステータスなどです。
そんなことはない。
0567デフォルトの名無しさん
2005/11/18(金) 00:43:33それは設計が悪い。
0568デフォルトの名無しさん
2005/11/18(金) 15:59:13そのcommon.hを50本のCソース(それぞれ個別実行プログラム)が参照しています。
今までcommon.h内にあるシンボル(define固定値)を共通で利用していたのですが
このシンボルでdefineにより決まっていた固定値が、今後変動する値を扱うようになります。
そこで一番影響が少なくテスト本数を最小限にとどめる事を目的として
修正ファイル、リコンパイルソースも極力少なく対応したいと考えます。
どのような方法が有効でしょうか?今考えているのは一つの実行プログラムを追加して
一番最初に動くように作りこみ
ヘッダーに持っているシンボルを自由自在な値に塗り替えるように作成すれば
可能な気がしますが、考え方としてはどうでしょうか?
0569デフォルトの名無しさん
2005/11/18(金) 16:02:07結論:ダメ。
何故ならば、defineシンボルはコンパイル時に使用されるだけだから。
実行モジュール中には、最適化の影響もあるから影も形も残ってないと思う。
0570デフォルトの名無しさん
2005/11/18(金) 16:03:49#例えば端末名やユーザ名が固定で埋まっている蛸なプログラムをバイナリパッチで救出したことはある。
0571デフォルトの名無しさん
2005/11/18(金) 16:09:47正整数を二つ入力して、それらの公約数を小さい順に表示してください
って問題やってるんですが
公約数を小さい順に表示ってどうやるんでしょうか?
0572デフォルトの名無しさん
2005/11/18(金) 16:15:21defineはコンパイル時のみに使用されてるのですね。勉強になりました。
50本のソースに対して極力少ない影響範囲の修正ということで
define定義をグローバル変数(char型)に変えるとまた違う問題点など出てきますでしょうか?
おっしゃる通り、ユーザー名とかそのあたりのchar型の値を取り扱っています。
バイナリパッチという方法もあるのですね、初めて聞くキーワードです。
ちょっとぐぐってまいります。
0573デフォルトの名無しさん
2005/11/18(金) 16:16:00qsort
公約数の求め方が分からないという質問なら氏ね
0574デフォルトの名無しさん
2005/11/18(金) 16:16:27公約数を小さい順に求めて表示して行けば、
必然的に小さい方から表示されるだろ。
0575デフォルトの名無しさん
2005/11/18(金) 16:19:43横から細かいこと言うと、コンパイル時っていうよりはプリコンパイル時な
リテラル以外でdefineに一致するのが全て置き換えられる
/* defineって#defineの事だよな? */
0576デフォルトの名無しさん
2005/11/18(金) 16:23:45> プリコンパイル
プリプロセスの方が一般的だね。
プリコンパイルだとプリコンパイルヘッダを連想してしまう…orz
0577569
2005/11/18(金) 16:47:50面倒だから説明を端折った。別に後悔していない。
>>572
ユーザー名なら文字列リテラルだろ?
50本ものモジュールの文字列をバイナリパッチするのは保守上、著しい問題があるので激しくお勧めできない。
#漏れの場合は一本だけだったし手作業だからできたわけで。
まぁ、文字列リテラルへのポインタを返す関数を用意するのがましかな。
どっちみち、50本の修正は避けられないけど。
0578569
2005/11/18(金) 16:53:17・グローバルな文字配列をもつ方法
common.h内で、
extern const char * UserName;
common.cなどのソース内で、
const char * UserName = "名無しの名";
・静的な文字配列をもつ方法
common.h内で、
static const char * UserName = "名無しの名";
・ポインタを返す関数を使う方法
common.h内で、
const char * GetUserName(void);
common.cなどのソース内で、
const char * GetUserName(void) {return "名無しの名";}
0579デフォルトの名無しさん
2005/11/18(金) 17:09:47親身なご指導ありがとうございます。非常に分かりやすかい説明です。
>>578であげていただいたように、対応する事にします。
他のみなさまもありがとうございました。非常に勉強になりました。
0580デフォルトの名無しさん
2005/11/18(金) 19:37:36直接読む方法はありますか?
例えば、キャッシュの0番地から100番地までを
読み出すとか。
0581デフォルトの名無しさん
2005/11/18(金) 19:40:200582デフォルトの名無しさん
2005/11/18(金) 20:25:01今日初めてC言語を勉強しました。
授業で「二つの整数a=45,b=1の和と差を求めるプログラム」として次の文章をノートに書きました。
/*例題6-1和と差を求める2005.11.18
高校名1年名前*/
#include<stdio.h>
int main(void)
{
int a,b,wa,sa;
a=45;
b=1;
wa=a+b;
sa=a-b;
printf("a+b=%d\n",wa);
printf("a-b=%d\n",sa);
}
これを実行すると画面上に
a+b=46
a-b=44
と出力されるそうです。
ファイル.cをコンパイルしないといけないと言われたのですが、どう言う事でしょうか?
0583デフォルトの名無しさん
2005/11/18(金) 20:33:210584デフォルトの名無しさん
2005/11/18(金) 20:35:29コンパイラでコンパイルしないといけない
無料コンパイラ http://www.borland.co.jp/cppbuilder/freecompiler/ (要ユーザ登録)
0585デフォルトの名無しさん
2005/11/18(金) 20:43:150586デフォルトの名無しさん
2005/11/18(金) 20:46:20最大公約数と最小公倍数だろプ
0588デフォルトの名無しさん
2005/11/18(金) 20:55:43氏ね
0589デフォルトの名無しさん
2005/11/18(金) 21:08:22main関数で下限から上限まで数値を動かして別関数に値を渡して素数か調べ、素数だった場合別関数内にて
printfしています。
これを1行に5個ずつ出力させ桁も揃えたいのですが、やりかたがわかりません。教えて下さい。
0590デフォルトの名無しさん
2005/11/18(金) 21:14:24漠然としすぎてどうしようもないが
frintf("%3d %3d %3d %3d %3d\n", num[i],num[i+1], num{i+2],num{i+3],num[i+4]);
i+=5
これをforかなんかで回せ
0591デフォルトの名無しさん
2005/11/18(金) 21:22:460592591
2005/11/18(金) 21:30:010593591
2005/11/18(金) 21:36:450594デフォルトの名無しさん
2005/11/18(金) 21:41:11ttp://www.geisya.or.jp/~mwm48961/math/m3gcm1.htm
0595デフォルトの名無しさん
2005/11/18(金) 21:47:50#define SCORE_CUL(x, y) ( ( (x) / (y) ) * 100 ) を作って、
int score_A = (int)SCORE_CUL(correct, count) //correct と count はintで変数
これでデバッグで score_Aの値みたら 異常な値になっちゃったけどなんで?
なんかマイナス8億くらいなんだけどw
0596デフォルトの名無しさん
2005/11/18(金) 21:55:43countが0だったんじゃねーの?
0597デフォルトの名無しさん
2005/11/18(金) 21:55:530598デフォルトの名無しさん
2005/11/18(金) 21:57:150599591
2005/11/18(金) 22:01:490600595
2005/11/18(金) 22:07:53>>596
countが0のときはSCORE_CUL()の前にアラート出すようにチェックしてあるよw
>>597
とりあえずやってみたけど変わらず。 マクロでdoubleにキャストするなら それをまた(int)でキャストするのは無駄じゃね?
いや、俺もよくわかんないんだけどもね
>>598
correct と count は定義済みです。
ちなみに 表示させてみたのは
correct = 1 , count = 1 の時 score_A = 100
correct = 2 , count = 2 の時 score_A = 100
correct = 2 , count = 3 の時 score_A = 0 ('A`)
0601デフォルトの名無しさん
2005/11/18(金) 22:11:35当たり前
2 / 3 = 0
(((double)(x) / (y)) * 100)
0602デフォルトの名無しさん
2005/11/18(金) 22:13:12嘘はイクナイ!
0603デフォルトの名無しさん
2005/11/18(金) 22:18:380604600
2005/11/18(金) 22:19:02解決しました。 そうでした。 そもそもint だから 2 / 3 = 0 でつね。。。。
>>597 合ってました。ごめんなさい。
分子がdouble なら分母はdoubleにキャストしなくても、それは自動でやってくれるんですか?
0605デフォルトの名無しさん
2005/11/18(金) 22:25:43http://www9.plala.or.jp/sgwr-t/c_sub/TypeConversion.html
の3番
0607589
2005/11/18(金) 22:32:49ここまで作ったんですが、標準出力の場合はうまくいくんですが、ファイルに書き出すと最後の素数しか書かれません。
どうすればいいですか?
0608デフォルトの名無しさん
2005/11/18(金) 22:41:230609607
2005/11/18(金) 22:58:420610608
2005/11/18(金) 23:45:550611611
2005/11/19(土) 02:26:070612デフォルトの名無しさん
2005/11/19(土) 04:48:21{"田中一朗", 'M', 20}, //このような配列の初期化は
{"田中次郎", 'M', 16}, //staticで
{"田中花子", 'F', 18}
};
ただの構造体の初期化なんですが、サンプルプログラムには
”このような配列の初期化はstaticで” とそうするのがあたりまえのように書いてあるんですが、
この理由はなんでなんですか?
[引用元] 猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/intro/no_28.htm
0613デフォルトの名無しさん
2005/11/19(土) 06:33:33なぜでしょうか?
激初心者です
つД`)・゚・。・゚゚・*:.。
#include <iostream>
using namespace std;
int main()
{
cout << " bool:" sizeof( bool) << '\n';
getchar();
return 0;
}
0614613
2005/11/19(土) 06:51:58eh.h is only for C++!
です。
0615デフォルトの名無しさん
2005/11/19(土) 06:59:48{;;;;;;ゝ T辷iフ i f'辷jァ !i;;;;; autoの構造体は初期化できない
ヾ;;;ハ ノ .::!lリ;;r゙
`Z;i 〈.,_..,. ノ;;;;;;;;> そんなふうに考えていた時期が
,;ぇハ、 、_,.ー-、_',. ,f゙: Y;;f 俺にもありました
ANSI C以前の時期だか
0616デフォルトの名無しさん
2005/11/19(土) 06:59:53cout << " bool:" << sizeof( bool) << '\n';
0617613
2005/11/19(土) 07:51:10<<616様
ご解答ありがとうございます!
少し前進しました^^
でも依然としてeh.h is only for C++!
のエラーが一つ出てしまい実行出来ません。
ググってみますとiostreamのところに問題があるようなのですが…
どなたかお願いします。m(_ _)m
0618613
2005/11/19(土) 07:53:31<<615様はミスでした。
すみません
0619デフォルトの名無しさん
2005/11/19(土) 07:56:540620613
2005/11/19(土) 07:59:02出力画面保持のため使用してるのですが…
0621デフォルトの名無しさん
2005/11/19(土) 09:02:40そもそも613のソースファイルの拡張子はcppなどになっているか?
>>620
getchar()を使うには<cstdio>のインクルードが必要。
<iostream>だけで行いたいのならcin.get()が代替になる。
0622デフォルトの名無しさん
2005/11/19(土) 09:22:52あいまいな質問だな
0623613
2005/11/19(土) 10:08:15ありがとうございます!
言われた通りにしたらエラーが消えました!
cppになってませんでした。cでやってました。
ほんとうに感謝です!
実行してみたのですが画面出力が真っ黒で
何も出力されていません。
たまに出力される時もあるのですが…
原因わかる方いらっしゃいますか?
自分でも鬱陶しいなって思ってます。
すみません。
0624613
2005/11/19(土) 10:12:35OSはwin98です
つД`)・゚・。・゚゚・*:.。
0625デフォルトの名無しさん
2005/11/19(土) 11:02:05って言う本ありますか?
0626デフォルトの名無しさん
2005/11/19(土) 11:06:260627デフォルトの名無しさん
2005/11/19(土) 11:09:05と
C言語逆引き大全500の極意
では、どちらがオススメですか?
0628デフォルトの名無しさん
2005/11/19(土) 11:19:470629デフォルトの名無しさん
2005/11/19(土) 11:20:430630デフォルトの名無しさん
2005/11/19(土) 11:29:38C言語の本としては冗長だ
文法を勉強してとにかくソースを読め
0631デフォルトの名無しさん
2005/11/19(土) 11:29:540632デフォルトの名無しさん
2005/11/19(土) 12:00:29ここはC言語激初心者スレ、C++はスレ違い。
>>612
autoの配列は、初期化処理が入るため無駄が多い。
但し、その場合はstatic struct nmlistではなくstatic const struct nmlistにするべきかもしれない。
0634デフォルトの名無しさん
2005/11/19(土) 15:13:260635デフォルトの名無しさん
2005/11/19(土) 15:38:340636デフォルトの名無しさん
2005/11/19(土) 15:45:19>コマンドラインでカレントディレクトリをwin01.cppのあるディレクトリにしておきます。そこで、
>bcc32 -W -eRelease\win01.exe win01.cpp
>と打ち込みます。
次に、指示通り-w-8057を打ち込みましたが
Releaseフォルダの中にwin01.exeは現れませんでした。
0637デフォルトの名無しさん
2005/11/19(土) 16:01:54そのコマンドを打って何かメッセージは出るだろ。それを書き写せ。
0638636
2005/11/19(土) 16:10:21Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
エラー E2075: コマンドライン オプションの間違い : -W -eRelease\win01.exe
0639デフォルトの名無しさん
2005/11/19(土) 16:16:38ヒント
while (tmp = (x % y)) {
x = y;
y = tmp;
}
return y;
0640デフォルトの名無しさん
2005/11/19(土) 16:18:14全角空白を使うな。
0641636
2005/11/19(土) 16:52:36出来ました。
本当にありがとうございました。
0642デフォルトの名無しさん
2005/11/19(土) 17:00:27long double型の使用方法で大変困窮しております。
変数に小数点の値を代入して%.30lfで表示させても-0.000(以下略 と表示されてしまうのです。
また、long doubleがdouble型と同等の有効桁数しか扱わないという話も聞きます。
C言語における確実な有効桁数30桁レベルの拡張倍制度実数型を使う方法をご教示下さい。
0643デフォルトの名無しさん
2005/11/19(土) 17:13:08少なくとも型の大きさは処理系定義,つまりコンパイラ次第。
たとえばVC++でのlong doubleとdoubleは同一の大きさ(64bit倍精度)という場合もある。
0644デフォルトの名無しさん
2005/11/19(土) 17:22:07doubleは確実に15桁程度なので、もしlong doubleが15桁程度であるのなら、
確実に30桁ある拡張倍精度実数型を使用する方法をご教示いただきたく思います。
0645デフォルトの名無しさん
2005/11/19(土) 17:47:42こういった浮動小数点数型の情報は<float.h>を見ればある程度はわかる。
仮数部の桁数はXXX_DIGの定義を見ればわかる。(XXXにはFLT/DBL/LDBLを当てはめる)
俺もBCCを持っているので見てみると、こうなっている。
#define DBL_DIG 15
#define FLT_DIG 6
#define LDBL_DIG 18
……。はい残念でした。ちなみにBorlandのlong doubleは80bit。
x86の浮動小数点数のメモリ読み書きの命令は32, 64, 80bitを受け付けて、レジスタ上では全て80bitで保持している。
(だからほとんどのx86用の処理系ではfloat/double/long doubleの大きさは32/64/80bitになっている)
つまりCPUに頼らず自分でどうにかするしかない。
0646デフォルトの名無しさん
2005/11/19(土) 17:56:39自分なりの解決方法を模索してみます。
0647636
2005/11/19(土) 17:59:40>これで、プログラムができあがりです。テストランするには、メニューの「実行」「実行」を選択します。
実行が灰色になってて選択できません。
それまでは手順どおりにやったので大丈夫かと思います。
0649デフォルトの名無しさん
2005/11/19(土) 19:01:10トレースするとreturn d;で落ちてるようです。
原因が分かりません。
NANやINFだとしても、returnで落ちることは無いと思うんですが。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double ex1(void)
{
return pow(3.4, 567) * pow(10, 10);
}
double ex2(void)
{
double a, b, c, d;
a = 3.4;
b = 567;
c = pow(a, b);
d = c * pow(10, 10);
return d;
}
int main(void)
{
printf("ex1:\n");
ex1();
printf("ex2:\n");
ex2();
return EXIT_SUCCESS;
}
0650デフォルトの名無しさん
2005/11/19(土) 19:13:16atoi()の逆のことがやりたいのです。
fprintf()の最初の引数が FILE* でなくて char* になってるようなのを
探しているのですが。
0651デフォルトの名無しさん
2005/11/19(土) 19:16:420652デフォルトの名無しさん
2005/11/19(土) 19:19:53ありがとうございました。
0653デフォルトの名無しさん
2005/11/19(土) 20:54:41それって1と無限大を返せばいいんじゃねぇの?
0654デフォルトの名無しさん
2005/11/19(土) 22:07:26scanf("%d%d",&a,&b);
としたときに入力をホワイトスペースで区切らなきゃいけないのはなんで?
感覚的にはそうじゃなきゃ入力から代入できないなとは思うんだけど、
scanf("%d%c%d",&a,c,&b);
ではホワイトスペースで区切らなくても代入できる。
これはformatで変換指定で%cとされてるから次に来るのが文字と
内部的に判断されてるからなんですかね?
0655デフォルトの名無しさん
2005/11/19(土) 22:07:360656デフォルトの名無しさん
2005/11/19(土) 22:08:11→scanf("%d%c%d",&a,&c,&b)でした
0657デフォルトの名無しさん
2005/11/19(土) 22:29:04%c(とたしか%[]系)は空白類文字も読み込む仕様。
その他の書式指定は空白類文字を読み飛ばす仕様。
0658デフォルトの名無しさん
2005/11/19(土) 22:35:13{
int c=1;
while (c)
{
c=a%b;
a=b;b=c;
}
このプログラムなんですが。while(c)とはどういう意味ですか?
0659デフォルトの名無しさん
2005/11/19(土) 22:37:04c
という式が真(0以外)か偽(0)を評価して、
真ならば{}内を実行、偽ならば実行しない。
この場合cに1が代入されてるから実行する。
0660デフォルトの名無しさん
2005/11/19(土) 22:43:34分かりましたありがとうございます
0661デフォルトの名無しさん
2005/11/19(土) 23:07:35printf("暗号キーを入力してください>");
scanf("%s",key);
keylen=strlen(key);
//原文ファイル(入力ファイル)オープン
fp=fopen(filename,"rb");
if(!fp){
printf("エラー1ファイルオープンエラー\n");
exit(1);
}
printf("原文ファイルオープン完了\n");
0662デフォルトの名無しさん
2005/11/19(土) 23:09:02strcpy(outfilename,filename);
strcat(outfilename,"_");
if(!wfp){
printf("エラー2ファイルオープンエラー\n");
exit(1);
}
printf("暗号化ファイルオープン完了\n");
//暗号化
while (fread(&ch,sizeof(char),1,fp)==1){
printf("ステップ1完了\n");
ch=ch+key[i++];
printf("ステップ2完了\n");
if(i>=keylen){i=0;}
printf("ステップ3完了\n");
fwrite(&ch,sizeof(char),1,wfp);
}
printf("暗号化完了\n");
fclose(wfp);
printf("wfpクローズ完了\n");
fclose(fp);
printf("ファイル%sを暗号化しました\n",filename);
printf("作成ファイル:%s\n",outfilename);
return 0;
}
ステップ3完了のところでエラーがでるので
fwrite(&ch,sizeof(char),1,wfp);が悪さをしているのはわかったのですがそこからがわかりません。
よろしくおねがいします。
0663誤爆してしまましたこれが一番上にきます
2005/11/19(土) 23:09:50問題が発生したためとの趣旨で終了させられます。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<dir.h>
main(int argc,char*argv[]){
char ch;
FILE *fp;
FILE *wfp;
char filename[256];
char outfilename[256];
char key[128];
int keylen;
int i=0;
//原文ファイル名の決定
if(argc > 1){
strcpy(filename,argv[1]);
}else{
printf("ファイル名を入力してください>");
scanf("%s",filename);
}
0664デフォルトの名無しさん
2005/11/19(土) 23:15:120665デフォルトの名無しさん
2005/11/19(土) 23:21:330666デフォルトの名無しさん
2005/11/19(土) 23:22:240667デフォルトの名無しさん
2005/11/19(土) 23:45:09printf("エラー2ファイルオープンエラー\n");
exit(1);
}
0668デフォルトの名無しさん
2005/11/19(土) 23:46:250669デフォルトの名無しさん
2005/11/19(土) 23:53:00てか、誤爆した挙句ネタなのかよ
0670デフォルトの名無しさん
2005/11/20(日) 09:42:25ありがとうございます。
strcpy(outfilename,filename);
strcat(outfilename,"_");
wfp=fopen(outfilename,"wb");
if(!wfp){
でおkみたいです。fopenし忘れる初歩的なミスでスレを汚してしまいました。
すいませんでした。
0671デフォルトの名無しさん
2005/11/20(日) 20:17:53などと書いた場合に、エスケープシーケンスの部分\\の解釈
はプリプロセッサが行うのでしょうか?
0672デフォルトの名無しさん
2005/11/20(日) 20:19:440673デフォルトの名無しさん
2005/11/20(日) 20:20:440674671
2005/11/20(日) 20:21:530675デフォルトの名無しさん
2005/11/20(日) 20:24:410676デフォルトの名無しさん
2005/11/20(日) 20:25:580677デフォルトの名無しさん
2005/11/20(日) 20:26:04外部シンボル ’_main’が未解決 (C:\borand\bcc55\lib\cox32.obj が参照)
っていうエラーがでます。
どういう意味ですか?
0678デフォルトの名無しさん
2005/11/20(日) 20:30:06当該スレへ。
0679677
2005/11/20(日) 20:32:33とりあえずCスレではないのですね。ありがとうございました。
それでは逝ってきます。
0680デフォルトの名無しさん
2005/11/20(日) 21:06:09をいれて表示するっていうプログラムを関数つかって作ったんですけどSegmentation faultってでてしまうんです。ちなみにLinuxです。
悪いところを教えてください。
#include <stdio.h>
char ho(char ho[20])
{
int i;
while(ho[i]=11)
{
ho[i]=33;
}
return ho[20];
}
int main()
{
int i;
char na[20],s[20];
for(i=0;i<20;i++)
{
na[i]=0;
}
printf("文字列を入力->");
scanf("%s",na);
s[20]=ho(na);
printf("%s",&s);
}
0681デフォルトの名無しさん
2005/11/20(日) 21:08:550682デフォルトの名無しさん
2005/11/20(日) 21:12:430683デフォルトの名無しさん
2005/11/20(日) 21:15:30とりあえず、return ho[20]は何のために書いた?
s[20]=ho(na)も。
0684680
2005/11/20(日) 21:18:12Segmentation faultってことは
メインと関数の間で受け渡しがうまくいってないってことですか?
0685デフォルトの名無しさん
2005/11/20(日) 21:21:40Segmentation fault の直接の原因は ho関数先頭の int i の初期化忘れ。
0686680
2005/11/20(日) 21:35:08return ho[20]ってのはho関数の結果として返してるってことですよね?
あと初期化したら入力の時点で回り続けるようになりました。
0687デフォルトの名無しさん
2005/11/20(日) 21:48:42return ho[20]ってのはho関数の結果として返してるってことですよね?
s[20]=ho(na)ってのは20要素確保されたsの21番目にhoの返り血を代入するってことで
return ho[20]ってのは引数hoの21番目の要素を返すってことです。
>入力の時点で回り続けるようになりました。
要するに無限ループに陥ったと。= と == の違いについて調べたまへ。
0688デフォルトの名無しさん
2005/11/20(日) 22:05:500x12341234 => 00010010 00110100 00010010 00110100
のようにバイトに区切って1バイト毎に格納するプログラムを作りたいんです。
単純に2進数に変換するだけならできるんだけど区切る方法が思いつかなくて・・・お願いします
0689デフォルトの名無しさん
2005/11/20(日) 22:08:28激初心者を誘っといて釣り呼ばわりしてストレス解消とはたちの悪い奴らだな。
0690680
2005/11/20(日) 22:10:34でもそうするとreturnがわかりません。あとメイン側もs=ho(na);に
してみましたがこれでよいのでしょうか?
0691デフォルトの名無しさん
2005/11/20(日) 22:13:09単純に1バイトを2進文字列にする関数を引数(x >> 24) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数(x >> 16) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数(x >> 8) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数x & 0xffで呼ぶ
0692デフォルトの名無しさん
2005/11/20(日) 22:13:46とりあえず言っておくと、配列を返すことは出来ない
0694デフォルトの名無しさん
2005/11/20(日) 22:23:09引数で渡しているのは、配列先頭を指すポインタ。
0695680
2005/11/20(日) 22:24:09あとho関数の最初のiの初期化ですがi=1を加えると無限ループになってしまうのですがこれはまちがっているんですか?
0696デフォルトの名無しさん
2005/11/20(日) 22:34:18ho(na, s)って言う感じに
0697デフォルトの名無しさん
2005/11/20(日) 22:47:07680みたいなコード見ると昔の自分を思い出して恥ず〜で「釣り」って書いちゃうんだよ
サポートはサポートでやってるんだからそう怒るんって。
>>695
C言語では配列は0から始まる。char na[20]; と宣言したなら、
na[0] から na[19] までが有効な範囲だ。
while(ho[i]=11) というのは ho[i] に 11 を代入した上で
ho[i] がゼロであるかどうかを判別しているので無限ループになる
以前は ho[i] が例えば ho[-38234] とかになってたせいで
Segmentation fault になってたわけだわな。
0698688
2005/11/20(日) 22:51:38軽くでいいからヒントお願いします・・orz
0699680
2005/11/20(日) 22:57:14答えおしえてください。ごめんなさい
0700デフォルトの名無しさん
2005/11/20(日) 22:59:520701デフォルトの名無しさん
2005/11/20(日) 23:05:05int main(void) {char buf[100]; while (gets(buf)) printf("%s!\n", buf); return 0;}
0702680
2005/11/20(日) 23:11:35配列と関数では無理ってことですか
0703デフォルトの名無しさん
2005/11/20(日) 23:13:50getsはバッファオーバーランなどの危険が伴うから。
fgets使え。
0704デフォルトの名無しさん
2005/11/20(日) 23:15:25int main(void) {char buf[100]; while (fgets(buf, 100, stdin)) printf("%s!\n", buf); return 0;}
0705680
2005/11/20(日) 23:18:110706680
2005/11/20(日) 23:44:300707デフォルトの名無しさん
2005/11/20(日) 23:55:44LF
ただしCではどんな環境でも改行文字は'\n'と定められている。
(たとえばWindowsでは入出力時に\r\nと\nの変換が行われている)
0708デフォルトの名無しさん
2005/11/20(日) 23:59:18具体的にそれがどういうことをされると、どういった危険が伴うんですか?
0709デフォルトの名無しさん
2005/11/21(月) 00:05:550710デフォルトの名無しさん
2005/11/21(月) 00:07:24バッファオーバーランとは本来実行するコードやそこへのアドレスが書かれたメモリにデータが書き込まれてしまうこと。
華麗に悪用されるとクラッカーにプログラムの実行を乗っ取られてしまう。
ウィルスを仕込んだり機密データを読み取ったりその気になれば自由自在。
0711デフォルトの名無しさん
2005/11/21(月) 00:20:060712デフォルトの名無しさん
2005/11/21(月) 01:11:15char str1[] = "aaa";
char str2[] = "aaa";
if(str1 == str2){
・・・・
}
ではうまくいきません
どうすればいいんでしょう
0713デフォルトの名無しさん
2005/11/21(月) 01:13:22入門書でも読めば?
そんなレベルの質問をずっと続けるつもりですか?
0714デフォルトの名無しさん
2005/11/21(月) 01:20:090715デフォルトの名無しさん
2005/11/21(月) 01:33:510716デフォルトの名無しさん
2005/11/21(月) 01:43:320717デフォルトの名無しさん
2005/11/21(月) 01:44:33調べたらこれが分かりやすかった
http://www.ipa.go.jp/security/awareness/vendor/programming/b06_01.html
スタックの構造知ってたら当たり前のことなのね・・・
>>712
ヒント:strcmp
0718デフォルトの名無しさん
2005/11/21(月) 01:45:58char str1[ ] = {aaa};
以下同様に...
0719デフォルトの名無しさん
2005/11/21(月) 01:51:27ありがとうございます。
一文字ずつ比べてたorz
0720デフォルトの名無しさん
2005/11/21(月) 22:24:20判定文って
scanf("%s" , str ) == EOF
じゃだめなの?
0721デフォルトの名無しさん
2005/11/21(月) 23:35:43終了させたかったら CTRL+Z なり CTRL+D なり打ってってね、
という了解の上ならそれで良いんじゃないの。
0722デフォルトの名無しさん
2005/11/22(火) 00:52:510723デフォルトの名無しさん
2005/11/22(火) 10:02:200724デフォルトの名無しさん
2005/11/22(火) 10:50:040725デフォルトの名無しさん
2005/11/22(火) 14:02:46計算結果を出力しようとしたら
1.#QNANO
って出るんですが↑ってどうゆうことですか?
0726デフォルトの名無しさん
2005/11/22(火) 14:06:140727デフォルトの名無しさん
2005/11/22(火) 14:11:310728デフォルトの名無しさん
2005/11/22(火) 14:21:47プログラムがかなり長いので‥w
printf("%3f %f\n",s,ins[i]);
↑でsの値とins[i]に格納した値を出力しようとしたら
0.001000 1.#QNANO
と出力されてしまいましたw
0729デフォルトの名無しさん
2005/11/22(火) 15:09:20恐らく、ins[i]がfloat型かdouble型じゃないか、配列の中身が壊れているんジャマイカ。
直前にins[i] = 0;すれば0が出力されるはずだ。
或いは、ins[i] + ins[i]を出力しようとしてみても何かわかるかも知らん。
0730728
2005/11/22(火) 15:25:24レスありがとうございます!
ins[i]はdouble型です。
ins[i]=0;を直前にいれると
0.001000 0.0000000
と出力しました。
ins[i]+ins[i]を出力しようとすると
0.001000 1.#QNANO
と出力されてしまいました。。
0731デフォルトの名無しさん
2005/11/22(火) 15:43:36そうなると、配列の中身が壊れている。
壊れている原因はこんなもんかな。
・0割り算した結果が格納された
・初期化されていない
・他の配列操作か何かで上書きされた
0732デフォルトの名無しさん
2005/11/22(火) 16:22:36#include <stdlib.h>
#include <string.h>
#include <iostream>
#define LINE_BUF 80
#define LOG_ARRAY 1000
using std::cin;
using std::cout;
using std::endl;
int space(char*src){
int n;
if(src==NULL){
return 0;
}
for(n=0;n<strlen(src);n++){
if(src[n]==' '){
return n+1;
}
else if(src[n]=='\t'){
return n+1;
}
}
return 0;
}
int comp(const void *p1, const void *p2){
return( *(int *)p1 - *(int *)p2 );
}
0733デフォルトの名無しさん
2005/11/22(火) 16:23:58char src[LINE_BUF];
int line,z,n;
FILE* fp=fopen("AHO.txt","r");
n=sizeof(src)/sizeof(src[0]);
if(!fp){
printf("File open error\n");
return 0;
}
for(line=0;fgets(src,sizeof src,fp)!=NULL;line++){
z = space(src);
qsort(z,81,sizeof(src[0]),comp);
cout << z <<endl;
}
fclose(fp);
return 0;
}
このプログラムをコンパイルしようとすると,test.cpp:44: error: invalid conversion from `int' to `void*'というエラーが出ます。
どこを手直しすればよろしいのでしょうか?よろしくお願いします。
0734デフォルトの名無しさん
2005/11/22(火) 16:32:30>どこを手直しすればよろしいのでしょうか
該当個所だけでなく、あちらこちら。
配列について勉強しなおせ。
0735デフォルトの名無しさん
2005/11/22(火) 16:56:38作り方を教えてください。例えば Wprintf()というものを
int Wprintf(int a, const char *format,...)
{
if(a < 0) return -1; /* もし第1引数が負ならば即終了 */
else printf(format,...); /* ここで第2引数以下全てをprintf()に渡したい */
return 0;
}
な感じにしたいんですが printfにどうやって第2引数以下全ての引数を渡せばいいんでしょうか。
0736デフォルトの名無しさん
2005/11/22(火) 16:57:25つ[vprintf()]
0737デフォルトの名無しさん
2005/11/22(火) 17:16:12第1パラメータ。
なんだけど、どうやら数値と文字列の区別がついてない模様。
0738728
2005/11/22(火) 17:19:39台形公式を使った定積分の数値計算なので
式のどこかで0で割ってしまっているかもしれません。
初期化、上書きは問題ないようなので
もう一度式を洗い直してみます。
ご教授ありがとうございました!
0739デフォルトの名無しさん
2005/11/22(火) 17:35:01どなたか教えてください
0740デフォルトの名無しさん
2005/11/22(火) 17:42:33ありがとうございます。解決しました。
0741伝説新人タクシ
2005/11/22(火) 18:19:20MSDOSでnslookupと打てばわかる。もしくは、教えてくれるサーバに行く。
マジレスすると、DNSサーバに問い合わせる。
ポート番号は・・・・。
0742デフォルトの名無しさん
2005/11/22(火) 19:02:39すみません言葉不足でした。
自PCのIPアドレスを収得したいのですが?
0743デフォルトの名無しさん
2005/11/22(火) 19:08:29リターンをそれぞれ読み込むにはどのようにすればいいでしょうか。
0744デフォルトの名無しさん
2005/11/22(火) 19:17:56必ず127.0.0.1と決まっています。
0745739
2005/11/22(火) 19:27:01本当にありがとうございました
0746デフォルトの名無しさん
2005/11/22(火) 21:06:18getchar 使うのが一番わかりやすいかな?
int c;
while ((c = getchar()) != EOF) {
if (c == '\n') {
/* ここで時間を計る */
}
}
0747伝説新人タクシ
2005/11/22(火) 21:15:50Cプログラムでないなら、板違い。質問すれをすすめます。
127.0.0.1も間違ってはないが>>739はなんで知りたかったんだろう。
0748デフォルトの名無しさん
2005/11/22(火) 21:28:39QNANDって "Quiet Not A Number Division" 例外のことで合ってますよね?
0749デフォルトの名無しさん
2005/11/22(火) 23:35:32printfで確かめてる最中、変な事が起きました
#include <stdio.h>
#include <string.h>
int main(void) {
int i;
char s1[999][999];
for( i = 0; i < 10;i++ ) {
scanf("%s\n",s1[i]);
printf("%s\n",s1[i]);
}
return(0);
}
これで実行してみると、最初に文字列を入力しても出力しないで、次の文字列を入力すると
一個前の文字列が出力されてしまいます。
scanfをgetsに変えたら順次出力されたのですが、これはなんででしょうか
0750デフォルトの名無しさん
2005/11/22(火) 23:45:59・scanf()の仕様をよく読んでください。
#改行コードは何のためにつけているのですか?
・gets()は使ってはいけません。
#代わりにfgets()が使えます。
・配列の要素数が999個というのは何のメリットもありません。
#判りやすく1000個としてみては如何でしょうか。
0751デフォルトの名無しさん
2005/11/22(火) 23:49:44ごめんなさい、よくわかりません
>・gets()は使ってはいけません。
今のところ学校でscanfとgetsしか習ってないもので
>・配列の要素数が999個というのは何のメリットもありません。
解りました、1000にしてみます
0752デフォルトの名無しさん
2005/11/22(火) 23:56:30scanf( 書式指定文字列 , アドレス);
0753デフォルトの名無しさん
2005/11/22(火) 23:58:500754デフォルトの名無しさん
2005/11/23(水) 00:03:410755デフォルトの名無しさん
2005/11/23(水) 15:01:19Borland C++ Compiler というのでCのコンパイルはできますか?
0756デフォルトの名無しさん
2005/11/23(水) 15:14:150757デフォルトの名無しさん
2005/11/23(水) 15:21:230758デフォルトの名無しさん
2005/11/23(水) 16:11:06*
**
***
****
↑このように出力するプログラムはどうやって作ればいいんでしょう。どなたか教えてください('A`)
0759デフォルトの名無しさん
2005/11/23(水) 16:25:25それを他人に図を使わずに説明しようと試みてください。
ほぼそれがプログラムになります。
0761デフォルトの名無しさん
2005/11/23(水) 16:31:34sscanf(buf, "%d %d %d %d %d %d", &a[0],&a[1],&a[2],&a[3],&a[4],&a[5]);
こんな風にfgetsで1行取り込んだあとbufから多くの数字を取り出したいときに配列の添え字を直接数字でなく
for(i=0;i<MAX; i++) func(buf, "%d ", &a[i]);
のような形で取り出す方法あります?
上記func部をsscanfにしてみてもbufの最初の数字を何回も配列に放り込んでいくだけにしかならないんですが。
0762デフォルトの名無しさん
2005/11/23(水) 16:55:11strtok でトークンを切り出して atoi で変換というのが方法の一つですね。
それから質問は揚げていきましょう。
0763デフォルトの名無しさん
2005/11/23(水) 16:56:52sscanfだと無理なんじゃないかな。
数値のみならstrtolでループ回せば出来る。
0764デフォルトの名無しさん
2005/11/23(水) 16:58:25int a[20];
int idx;
int cnt;
char buf[100];
char * str;
str = fgets(buf, sizeof(buf), stdin);
do {
cnt = sscanf(str, "%d%n", & a[ic], & idx);
if (cnt > 0) {
++ic;
}
str += idx;
} while (cnt > 0);
0765デフォルトの名無しさん
2005/11/23(水) 16:59:020767デフォルトの名無しさん
2005/11/23(水) 19:11:24>>755
できる。拡張子cだとCとしてコンパイルされて、拡張子がcppなどだとC++としてコンパイルされる。
けれどCの勉強をするのであっても基本的には拡張子cppにしてC++コンパイルにするほうが良い。
なぜならC++のほうがエラーチェックが厳しくなっているから。
0768デフォルトの名無しさん
2005/11/23(水) 20:32:36馬鹿に馬鹿な事を言うな馬鹿
0769デフォルトの名無しさん
2005/11/23(水) 21:21:25main [] {
printf["c programming"];
return 0;
}
↑これを実行すると
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
sample.c:
エラー E2141 sample.c 3: 宣言の構文エラー
*** 1 errors in Compile ***
とエラーがでます
どうすればいいのでしょうか?
0770デフォルトの名無しさん
2005/11/23(水) 21:22:44#include<stdio.h>
#include<math.h>
#define N 100
void main()
{
int i,n;
double s,ss,average,variance,sigma,w;
double a[N+1];
/*データの個数の入力*/
printf("データの個数を入力してください\n");
printf("n=");
scanf("%d",&n);
/*安全装置*/
if (n>N)
exit(1);
/*データの入力*/
for (i=1; i<=n; ++i) {
printf("a[%d]=",i);
scanf("%lf",&a[i]);
}
s=0.0;
0771デフォルトの名無しさん
2005/11/23(水) 21:23:11[]を()に置き換えろ。
0772デフォルトの名無しさん
2005/11/23(水) 21:23:180773770
2005/11/23(水) 21:23:23/*データの和の計算*/
for (i=1; i<=n; ++i)
s+=a[i];
average=s/n;
printf("平均値 %lf \n",average);
for (i=1; i<=n; ++i) {
w=a[i]-average;
ss+=w*w;
}
variance=ss/n;
printf("分散 %lf \n",variance);
sigma=sqrt(variance);
printf("標準偏差 %lf \n",sigma);
}
0774770
2005/11/23(水) 21:26:04何かプログラムに問題があると思うんですが・・・どなたかご指摘よろしくお願いします。
0775デフォルトの名無しさん
2005/11/23(水) 21:31:00多分入力時の改行コードの問題。
配列をクリアもしてないからわけわからん値での計算になる。
0776デフォルトの名無しさん
2005/11/23(水) 21:31:33できました、ありがとうございます
半角入力の時に()を打つときはどうすばいいのでしょうか?
さっきはコピペで済ませましたが・・・
0777デフォルトの名無しさん
2005/11/23(水) 21:35:46IMEをOFFにしてShift+8や9でできるだろ。全角と何か違いがある?
0778デフォルトの名無しさん
2005/11/23(水) 21:37:288と9に()があるのに気づきませんでした('A`)
全角括弧にしたらエラーがでたので
どうもありがとうございます
0779デフォルトの名無しさん
2005/11/23(水) 22:30:110780デフォルトの名無しさん
2005/11/23(水) 22:44:110781デフォルトの名無しさん
2005/11/23(水) 23:13:15初心者です。いくつか疑問点に教えていただけないでしょうか。
派生クラスのメソッドが基本クラスのメソッドを呼び出せるのは分かるのですが
逆はできるのでしょうか?
あるメソッド内で宣言されたオブジェクトはそのメソッドを抜けたら自動的に消えるのですか?
消えるとしたらオブジェクトのメンバのデータも一緒に消失するのですか?
あるメソッド内でnewで動的に取得された構造体配列を他のメソッドから参照できるようにすることは
可能ですか?
以上、どうか宜しくお願いいたします。
0782デフォルトの名無しさん
2005/11/23(水) 23:19:45virtualメソッドでオーバーライドすればいい。
ローカル定義は消える、ヒープだと消えない。
クラスの定義次第だが、普通デストラクタで消す。
可能。っつーか、できなきゃ何のためにクラス変数があるのかわからん。
0783デフォルトの名無しさん
2005/11/23(水) 23:26:27(1)限られた状況で可能。
(2)(3)オブジェクトは関数などのスコープを抜けると、クラスで
あればデストラクタが呼び出されて、そのオブジェクトによって
静的に確保された領域が開放される。
(4)あるメソッド内で動的に確保された領域へのポインタを保存して
おけば、できる。ただし、デストラクタでの開放を忘れないように。
スレ違い。
0784デフォルトの名無しさん
2005/11/23(水) 23:33:44すばやいお返事ありがとうございました。調べてみたいと思います。
最後の質問についてなんですが、クラス変数に構造体配列を設定できる
ということでしょうか。
その場合配列の大きさはメソッドから動的に定められるのですか?
定められるとしたらキーワードだけでもいいので方法を教えて
いただけないでしょうか。
この点だけお願いいたします。
0785デフォルトの名無しさん
2005/11/23(水) 23:45:02時間差でレスしていただいたんですね。
ありがとうございました。調べてみます。
0786デフォルトの名無しさん
2005/11/24(木) 00:14:27配列の大きさは配列の大きさを持つ変数を別途用意する。
0787デフォルトの名無しさん
2005/11/24(木) 03:49:32http://game10.2ch.net/test/read.cgi/gameama/1132046031/832-
ここID:HS4B3ahIの言ってる事ってC言語使い的にどんなかんじ?
871 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2005/11/24(木) 03:40:45 ID:HS4B3ahI
>>867
あんなぁ、ゲーム会社ならミドルウェアとか買うのが今デフォらしいが
趣味ゲー作りの奴がそんなん買うかよ。
使うにしてもフリーのもん使うに決まってるだろ。
>>869
ウゼー、ホレ
#include <stdio.h>
int main(){ printf("ID:HS4B3ahI\n"); return 0; }
0788デフォルトの名無しさん
2005/11/24(木) 16:03:33PDFファイルを開いて、VC++で作った画面に表示をさせたいのです。
そのためには、Acrobat SDKを使用すれば可能でしょうか?
それとも、Acrobat SDKを使用しないでAPIみたいのがあるのでしょうか?
0789デフォルトの名無しさん
2005/11/24(木) 16:40:50少なくともPDFはオートメーションサーバになっているはずだから、
その気になればVC++付属のPratform SDKだけでもできる。
0790デフォルトの名無しさん
2005/11/24(木) 17:28:56まず、PDFのファイル構造を理解しているのか?と問いたい。
# 後、自力で解析すればどうにでもなる。
0791デフォルトの名無しさん
2005/11/24(木) 18:24:43改行させない方法があれば誰か教えてください。
0792デフォルトの名無しさん
2005/11/24(木) 19:45:12p = new int[0];
とするとpはどうなるんでしょうか
0793デフォルトの名無しさん
2005/11/24(木) 20:31:09要素のない配列が割り付けられる。By X 3014:2003 (ISO/IEC 14882 :2003)
だからC++はスレ違いっだってば!
0794デフォルトの名無しさん
2005/11/24(木) 23:19:50new[5000][5000]くらいのでっかいの作りたいのですが、どうもうまくいきません
intやdoubleで宣言して
どうやったら大きな配列が確保できるでしょうか
0795デフォルトの名無しさん
2005/11/24(木) 23:22:12malloc等で動的確保。
0796デフォルトの名無しさん
2005/11/24(木) 23:30:47int main(void){
char c; int i; long l; float f; double d;
char ac[5000][5000];/* Array of Char */
int ai[100][200];/* Array of Int */
double ad[120][200];/* Array of Double */
printf("# Basic Type\n");
printf("char:\t%d\n",sizeof(c));
printf("int:\t%d\n",sizeof(i));
printf("long:\t%d\n",sizeof(l));
printf("float:\t%d\n",sizeof(f));
printf("double:\t%d\n",sizeof(d));
printf("# Array\n");
printf("char array:\t%d\n",sizeof(ac));
printf("int array:\t%d\n",sizeof(ai));
printf("double array:\t%d\n",sizeof(ad));
printf("# Array Number\n");
printf("char array #:\t%d\n",sizeof(ac)/sizeof(char));
printf("int array #:\t%d\n",sizeof(ai)/sizeof(int));
printf("double array #:\t%d\n",sizeof(ad)/sizeof(double));
}
こういうので仮に2次元配列の容量を見ようとしたらとまって
↓
0797デフォルトの名無しさん
2005/11/24(木) 23:34:16だから、でかすぎるんだよ
0798デフォルトの名無しさん
2005/11/24(木) 23:37:39#include <stdlib.h>
#define SIZE (100)
int main(void) {
int a[1000][1000];
int i;
int *k;
k=(int *)malloc(SIZE*sizeof(a));
if(a==NULL) exit(-1);
for(i=0;i<SIZE;i++){
printf("[%2d]%d\n",i,k[i]);
if(i%10==9)
printf("\n"); }
free(k);
}
これだと落ちます
どうにかしてでかい配列扱いたいのですが
0799デフォルトの名無しさん
2005/11/24(木) 23:38:42関数内で宣言した変数のために使えるメモリは意外と小さい。(通常1MiBytes程度)
動的確保するのが理想だが,とりあえずは796の配列変数を全て静的変数にしてみろ。
char ac[5000][5000];→static char ac[5000][5000];
0800デフォルトの名無しさん
2005/11/24(木) 23:40:47> int a[1000][1000];
どうしてこれ残してるんだよ。
0801デフォルトの名無しさん
2005/11/24(木) 23:42:16できたできたー
今まで悩んでいたのがウソのようだ
助かりました、ありがとぅ〜
ありがとありがとありがと
0802デフォルトの名無しさん
2005/11/25(金) 03:54:440803デフォルトの名無しさん
2005/11/25(金) 06:05:050804伝説新人タクシ
2005/11/25(金) 13:24:12Aはふつう教えてないけど、でも学校で教えるのはBまでさ。
Cは自分でしなさい。Dは・・・・。っと
ここにもゆとーり教育の成果物が出てるな。
自分でしねえ、できねえヤシができるようになるわけねぇだろが。バカwww
そのコメントは「独学じゃあ無理ですよね!」って言いたげだな、ヲイ。
貴様が理解できない理由は 独 学 の せい じゃ な い。
あまり分からないだって?実際はまったく分からないんだろう。
学校とかで教えている内容のほうが屑だぞ。
まあ、勉強でも何でもして視野を広げられるようにしたほうがいいよ。
0805デフォルトの名無しさん
2005/11/25(金) 13:28:490806デフォルトの名無しさん
2005/11/25(金) 13:30:36無理ですから、専門学校に行って下さいね。
0807伝説新人タクシ
2005/11/25(金) 13:45:53勉強することは自信が持てたり、視野が広がったり、
多くのものを得られるのは事実だろう。
しかし、だからこそ教えてやらねばならんのだが扱いが>>802のように
難しいリアル厨などがいる。
彼らは勉強の方法すらその前にして自分も世界も若さゆえに知らんのだ。
2chとて礼節を弁え、スレを尊ばんとする者も居る。
さりとて、住人もリアルに生きているし、>>802のような若人には
厳しさも肝要。知らずにマルチもするだろう。
君も何れ大人になれば分かるときがくる。
0808デフォルトの名無しさん
2005/11/25(金) 16:50:18独学でも出来る
とりあえず、Linuxとかgnuのソースでも持ってきて何か一つ解析してみれば?
それが終ったら自分でそれのコピーを自分で書いてみる
これが出来れば大丈夫
0809デフォルトの名無しさん
2005/11/25(金) 18:17:470810半人前
2005/11/25(金) 23:37:49とりあえず初心者向け。
それと解らないのは読んでるからだ。
プログラムなんかやったことないやつが読んで理解できるわけないだろ。
ある程度基礎積んでるから他の言語の本読んでもわかる人いるけど
まるっきり初心者なら本買ってきて実際ににやりなさい。
ただ気をつけてほしいのは本に書いてるのをやると実際動く。
それで理解した気にならないでほしい。本のは正解、動いて当然。
それよりもどこがどうなって動いたのか、読み解けるようになれ。
まぁ、それが解析と言うやつだ。それが出来るようになったら、別の本を買え。
君がどこまでマスターしたいのか知らんがC言語における一般的なマスターと言うのは
プログラミング言語C ANSI規格準拠 第2版
を読み解けることだと私は思っている。
最後に二言、美しいプログラムを書け。
見てごちゃごちゃしてるプログラムは動くかどうかもわからない。
デバックもしにくい。
そして、コメントを書け。
自分だけでなく他の人が読んでも解るようにな。
コメントを書けば自分でも理解しながら書ける。
健闘を祈る。
0811デフォルトの名無しさん
2005/11/25(金) 23:40:07俺は除いて
0812デフォルトの名無しさん
2005/11/25(金) 23:41:180813半人前
2005/11/25(金) 23:51:170814デフォルトの名無しさん
2005/11/26(土) 06:38:19なってしまうため、ニュートン法などが使えません。ちなみに関数の形は
y=x*((x+0.01214)^2)*((0.98786-x)^2)*(0.0000000000667*1.0123)-((0.98786-x)^2)*0.0000000000667*1+((0.01214+x)^2)*0.0000000000667*0.0123
というものです(ラグランジュポイントのL1を求める式です)。
y=0となるxを求めるために、何か良い方法は無いでしょうか。
0815デフォルトの名無しさん
2005/11/26(土) 08:56:51無い
0816デフォルトの名無しさん
2005/11/26(土) 09:35:58y2 = y*2.0e-10/3.0 なる y2 の解を求めればええんじゃないの?
0817デフォルトの名無しさん
2005/11/26(土) 10:18:00ニュートン法が使えないって事はないが、二分法で。
#include <stdio.h>
#include <math.h>
double fn(double x){
return x*pow(x+0.01214,2)*pow(0.98786-x,2)*(0.0000000000667*1.0123)\
- pow(0.98786-x,2)*0.0000000000667*1 \
+ pow(0.01214+x,2)*0.0000000000667*0.0123;
}
int main(){
double x1=0.5, x3=1.0, x2,y;
double eps=0.000000000000001;
for(;;){
x2=(x1+x3)/2.0;
y=fn(x2);
if ((y==0) || fabs(x1-x3)<eps)
break;
else if (y < 0)
x1 = x2;
else
x3 = x2;
}
printf("%.15f\n",x2);
return 0;
}
0818814
2005/11/26(土) 11:26:34すみません、どうしてそれを求めればよいのかが分かりません・・・。
教えていただけないでしょうか。
>>817
ありがとうございます、完璧に出ました!
自分でプログラムした時にはそこまで小さなepsにするとエラーが出てしまったのですが、
このプログラムだと華麗に動きますね。感動しました、ありがとうございます。
0819814
2005/11/26(土) 11:59:29プログラムを参考にさせていただいた結果、ニュートン法でも結果を得ることができました。
本当にありがとうございました。勉強になりました。
0820816
2005/11/26(土) 13:53:26すでに解決済みのようだが意図としては右辺全項に 0.0000000000667 が掛かってるんで
これを消去した式で解を求めれば速度と精度と両方向上するよねってことですた。
y と y2 が逆だな。ちゃんと確認しろよ >>俺
0822デフォルトの名無しさん
2005/11/26(土) 16:50:40>a+b+cおよびa-b-cを計算するプログラムを作りなさい。
出力結果は
a+b+c=277
a-b-c=-207
にしたいのですが、どうすればいいでしょうか?
0823デフォルトの名無しさん
2005/11/26(土) 17:02:09b = 88;
c = 154;
printf("a+b+c=%d\n", a+b+c);
printf("a-b-c=%d\n", a-b-c);
0824822
2005/11/26(土) 17:07:04これでいいのでしょうか?
#include<stdio.h>
int main(void)
{
int a,b,c,a+b+c,a-b-c;
a=35;
b=88;
c=154;
a+b+c=a+b+c;
a-b-c=a-b-c;
printf("a+b+c=%d\n",wa);
printf("a-b-c=%d\n",sa);
return 0;
}
0825デフォルトの名無しさん
2005/11/26(土) 17:12:58いいえ
0826822
2005/11/26(土) 17:15:15なぜですか?
0827デフォルトの名無しさん
2005/11/26(土) 17:55:362.waとsaと言う変数が宣言されていないし値の代入が行われていない
0828822
2005/11/26(土) 18:10:192.は分りましたが、1.はどう宣言すれば良いのでしょうか?
0829デフォルトの名無しさん
2005/11/26(土) 18:12:33>>823
>>823
0830デフォルトの名無しさん
2005/11/26(土) 18:20:50sscanfとfgetsを使って、例えば「I am student.」
と入力したとき、
I → word[0]に1
am → word[1]に2
student→ word[2]に6
と配列に文字数を格納するにはどう
書けばいいのでしょうか・・。
0831822
2005/11/26(土) 18:22:28#include<stdio.h>
int main(void)
{
int a,b,c;
a=35;
b=88;
c=154;
printf("a+b+c=%d\n",a+b+c);
printf("a-b-c=%d\n",a-b-c);
return 0;
}
0832830
2005/11/26(土) 18:38:34%s%s%s・・・というのはやはり美しくないので
0833デフォルトの名無しさん
2005/11/26(土) 18:39:30#include<string.h>
char s[64];
printf("%s",strlen(fgets(s,64,stdin));
0834830
2005/11/26(土) 18:54:14#include<stdio.h>
#include<string.h>
char s[64];
int word[];
int main(void){
fgets(s,64,stdin);
sscanf(s,"%d",&word[]);
printf("%s",strlen(word[]));
return 0;
}
うまくいきません、配列の使い方がおかしいのでしょうか?
0835デフォルトの名無しさん
2005/11/26(土) 18:57:29#include <string.h>
int main()
{
int i, j;
char buf[1024];
char *word[256] = {0};
if( ! fgets(buf, sizeof(buf), stdin)) return 1;
if( ! (word[0] = strtok(buf, " "))) return 2;
for(i = 1; i < sizeof(word)/sizeof(word[0]); ++i) word[i] = strtok(NULL, " ");
for(j = 0; j < i; ++j) puts(word[j]);
return 0;
}
0836830
2005/11/26(土) 19:19:53strokの使い方は大体わかりました。
whileで回せば区切りは出来そうです。
sizeof()という関数は別に設定する必要は
ありますか?そのままだとデバックエラーに
なってしまいますので・・・。
0837830
2005/11/26(土) 19:21:050838デフォルトの名無しさん
2005/11/26(土) 19:26:46例外処理は考慮してない。
#include<stdio.h>
#include<string.h>
char s[64];
int word[64];
int main(void){
char tmp[64];
int i, offset;
fgets(s,64,stdin);
for(i = offset = 0; sscanf(s+offset,"%[^ .\n]%*c",tmp) == 1; i++) {
word[i] = strlen(tmp);
offset += word[i] + 1;
}
return 0;
}
0839830
2005/11/26(土) 19:46:51ありがとうございました!
最後に一つだけ教えてください。scanf中の
sは配列、offsetはint型関数でsscanfの第一引数は
配列型の指定が必要ですが、これは配列のアドレス
に+offsetしているのですか?
このsscanfは戻り値を返す判定のみでの使用ですよね?
0840デフォルトの名無しさん
2005/11/26(土) 20:05:04お前に必要なのは、とりあえず入門書だ。
0841デフォルトの名無しさん
2005/11/27(日) 01:37:34sizeofは関数ではなく演算子だ。
0842デフォルトの名無しさん
2005/11/27(日) 06:43:00初心者におすすめのC言語入門書というのはないでしょうか?
まだfor if辺りまでしか読んでません
0843デフォルトの名無しさん
2005/11/27(日) 08:27:260844デフォルトの名無しさん
2005/11/27(日) 16:23:34明日帰りによさそうなの適当に買ってみる
0845デフォルトの名無しさん
2005/11/27(日) 17:04:270846デフォルトの名無しさん
2005/11/27(日) 17:22:560847デフォルトの名無しさん
2005/11/27(日) 22:02:320848デフォルトの名無しさん
2005/11/28(月) 00:14:55Cの絵本
プログラミング言語C ANSI規格準拠 第2版(読めるならな)
0849デフォルトの名無しさん
2005/11/28(月) 15:38:112003って古い気がしてならないんだけど
0850デフォルトの名無しさん
2005/11/28(月) 15:42:272005Proがタダでもらえます(要登録
0851デフォルトの名無しさん
2005/11/28(月) 18:10:300852デフォルトの名無しさん
2005/11/28(月) 18:13:22ループの回数がマチマチで単純にオーダーを取ることでは比較しづらい
という現状です。
コンパイラのコマンドやソフトウェアで計算量を測れませんか?
0853デフォルトの名無しさん
2005/11/28(月) 18:17:31測れる環境があるデバッガはありますよ。
0854852
2005/11/28(月) 18:34:13すみませんが、そのデバッガは何処で手に入るか、
もしくは名称を教えていただけませんか?
0855デフォルトの名無しさん
2005/11/28(月) 18:46:15あなたの環境もわからないのに教えても無意味ですよ。
0856デフォルトの名無しさん
2005/11/28(月) 18:58:40デバッガでそんな事出来るのあるのか?
0857デフォルトの名無しさん
2005/11/28(月) 19:06:00ありますが何か?
0858852
2005/11/28(月) 20:28:10無知で申し訳ありません。
どちらにせよcygwinにプラグインする形をとることはできるのでしょうか?
0859デフォルトの名無しさん
2005/11/28(月) 21:39:05中一のがきんちょがゲームばかりやって、テストで2点とか
超パープリンな点数をとってきます。
で、ピアノが弾けるので芸無関係の業界へ進ませようと思ってます。
そこでCなんですが、VISUAL以外のただのCって売っているんで
しょうか?何処で買えば?それともVisualCが主流なんですか?
また、厨房向けの入門書もいいのがあったらご教授下さいませ。
0860デフォルトの名無しさん
2005/11/28(月) 21:48:15「cygwin gcc gprof」でぐぐれ
>>859
質問するときは奇を衒わず真っ当な文章を書こうな。
とりあえず ピアノが弾ける→ゲーム関係 ってのが意味不明。
0861デフォルトの名無しさん
2005/11/28(月) 21:49:24ピアノが弾けるのならピアニストになれよ。
0862デフォルトの名無しさん
2005/11/28(月) 22:02:060863伝説新人タクシ
2005/11/28(月) 22:04:51自己紹介"己"。
低脳人間を設定することで別の人間に仕立て上げる。
最低ではないが最悪だ。
言の端、普く全ての尽くが裏目に出る。
0864859
2005/11/28(月) 22:07:42>とりあえず ピアノが弾ける→ゲーム関係 ってのが意味不明。
ゲーム音楽の作曲アレンジとかをやればと思って。
>>861 >>862
いじめちゃいやん。
あふんばかん。
狂言はダメですらい。
0865デフォルトの名無しさん
2005/11/28(月) 22:09:190866伝説新人タクシ
2005/11/28(月) 22:10:500867デフォルトの名無しさん
2005/11/28(月) 22:13:47いや、だからゲーム音楽と絞っているか理解できない。なんの作曲家でも演奏家でもいいだろうに。
それはともかく音楽とプログラミング言語Cにはなんの関係もない。
料理人とレストラン経営の違いと同じぐらいの違いがある。
0868デフォルトの名無しさん
2005/11/28(月) 22:32:50はQが0でないとき繰り返すんですよね?
では、Q≠0から一度Q=0になり、再びQ≠0になったとき
終了させるにはどうすればいいですか?
0869デフォルトの名無しさん
2005/11/28(月) 22:38:30while (Q != 0) {
if (Q == 0) {
while (Q == 0) {
hoge;
}
break;
}
}
これでどうよ
ってかwhile ~ doってpascalの構文じゃね?
0870デフォルトの名無しさん
2005/11/28(月) 23:00:22876の言う通りゲーム業界に作曲系で入りたいのならCの知識は不要。
が、音屋さんの仕事って最初はループ再生用のカットとかノイズ低減とかで、
作曲アレンジなんておいしい仕事がくることは下手すると一生ないぞ。
音大くずれのゲーオタ連中と張り合っていける自信があるならどうぞいらっしゃいな。
0871870
2005/11/28(月) 23:39:34未来の876さん失礼いたしました。867さんの間違いでしゅ。
0872デフォルトの名無しさん
2005/11/29(火) 00:08:38ご教授お願いします。
for(i=n-1;i>=2;i--){
sentinel=0;
for(j=0;j<i;j++)
if(a[j]<a[j+1]){
swap(&a[j],&a[j+1]);
sentinel=1;
}
if(★) break;
}
0873デフォルトの名無しさん
2005/11/29(火) 00:09:25sentinel=0;
for(j=0;j<i;j++)
if(a[j]<a[j+1]){
swap(&a[j],&a[j+1]);
sentinel=1;
}
if(★) break;
}
でした;
0874デフォルトの名無しさん
2005/11/29(火) 01:10:49ありがとうございます。明日先生に見せてきます!
hogeって何ですか?すいません。これってpascalなんですか?!
0875デフォルトの名無しさん
2005/11/29(火) 05:18:49日本の情報処理技術者が替え玉記号のように利用することが多い文字列。情報処理の技術ではメタ構文変数(Metasyntactic variable)とも呼ばれる。
つまり「hoge」と書いてあったら「必要なほにゃらかに置き換えて使ってください」というちょめちょめになる。
0876デフォルトの名無しさん
2005/11/29(火) 10:08:52sentinel == 0 じゃねーの。
0877デフォルトの名無しさん
2005/11/29(火) 15:23:42(´・∀・`) ハーイ
( ⊃┳⊃
..(_)/⌒ヽ
⊂二二二( ^ω^)二⊃
| / ブーン
( ヽノ
ノ>ノ
三 レレ
0878デフォルトの名無しさん
2005/11/29(火) 18:47:02激初心者ですみません
0879デフォルトの名無しさん
2005/11/29(火) 18:52:47質問の答えをまた質問にすればOK。
0880デフォルトの名無しさん
2005/11/29(火) 21:20:09そういうのはsentinelとは言わないと思うのだが、その問題出したのはどこのどいつだ。
0881デフォルトの名無しさん
2005/11/30(水) 00:05:08CとC++どちらにすれば良いか迷っております。
どなたかアドバイス下さい。
0882デフォルトの名無しさん
2005/11/30(水) 00:17:39藻前にはどちらも無理
0883デフォルトの名無しさん
2005/11/30(水) 13:31:08ブルートフォースクラックとかプログラムはどういう仕組みで動いてるのか勉強したくて質問しました。
たとえば
パスワードが34ieの四文字英数字だったとします。
1から順に4文字を生成してるのはどういう仕組みなんでしょうか?
ただ単にそのまま四個のfor文でくるくる回してるんでしょうか?
具体例とかあったらうれしかです。
0884デフォルトの名無しさん
2005/11/30(水) 13:35:52つ[John the ripper]
0885デフォルトの名無しさん
2005/11/30(水) 13:38:540886デフォルトの名無しさん
2005/11/30(水) 13:41:430887デフォルトの名無しさん
2005/11/30(水) 13:42:48それはFIFA
0888デフォルトの名無しさん
2005/11/30(水) 14:28:56World Cup?
0889デフォルトの名無しさん
2005/11/30(水) 15:35:53クラスって何?
メソッドって何?
↑調べるとなんかループするし・・・orz
0890デフォルトの名無しさん
2005/11/30(水) 16:26:12C言語のスレよりふさわしい所で聞けやボケ
0891デフォルトの名無しさん
2005/11/30(水) 18:40:45よろしくお願いします。
0892デフォルトの名無しさん
2005/11/30(水) 19:58:29その出力が標準出力ならばリダイレクトでできる。
その出力がGUI上ならばコピペでできるかもしれない。
いずれにしろ、環境がわからなくては詳しくはかけない。
尚、ファイルに出力したいならばfopen()、fprintf()、fclose()などを調べよ。
0893デフォルトの名無しさん
2005/11/30(水) 19:59:04リダイレクト
0895デフォルトの名無しさん
2005/11/30(水) 21:02:17ループを抜けるようにプログラムしたいのですがうまくいきません。
buffer[20];
while(buffer[0]!='\n) {
scanf("%s",buffer);
}
このようなプログラムを作ってみましたが、
これではscanfが改行だけの入力だけでは、受け付けてくれないですし、
getche()とforループの組み合わせでもよい方法が浮かびません。
何かよい方法があれば教えてください。よろしくお願いします。
0896デフォルトの名無しさん
2005/11/30(水) 21:07:40リダイレクトは大抵のOSで "> ファイル名"と書く。
つまり、"プログラム名 > ファイル名"と書けばいい。
OSによっては'%'だったり'|'だったりする希ガス。
0897デフォルトの名無しさん
2005/11/30(水) 21:08:33fgets()で入力し、sscanf()で変換するのが常套手段。
#あ、その例ではsscanf()するまでもないや。
0898デフォルトの名無しさん
2005/11/30(水) 21:29:02|はパイプ
0899デフォルトの名無しさん
2005/11/30(水) 21:32:04返答ありがとうございます。
恐縮なんですが、fgets()で入力し、sscanf()で変換するというのがいまいちわかりません^^;
fgets()は、ファイルから1行呼び出してくる関数だったと思うんですが、
詳しく教えてもらえないでしょうか・・・。
0900デフォルトの名無しさん
2005/11/30(水) 21:39:22>>897でした^^;
0901デフォルトの名無しさん
2005/11/30(水) 21:41:11だからそういうOSがあるんだってばさ。
>>899
fgets()でもstdinを指定すれば標準入力から読める。
0902デフォルトの名無しさん
2005/11/30(水) 22:19:220903デフォルトの名無しさん
2005/11/30(水) 22:31:47出力結果を保存することができました。
ありがとうございました。
0904デフォルトの名無しさん
2005/11/30(水) 23:40:58ジョンザリッパーがどんな感じか聞いているんです。
0905デフォルトの名無しさん
2005/11/30(水) 23:50:14ソースを読め
0906デフォルトの名無しさん
2005/12/01(木) 00:08:130907デフォルトの名無しさん
2005/12/01(木) 00:09:310908デフォルトの名無しさん
2005/12/01(木) 00:17:06ただしwhile文を用いること。
というプログラムはどうやって作ればいいのでしょうか。。。
0909!omikuji
2005/12/01(木) 00:17:070910デフォルトの名無しさん
2005/12/01(木) 00:21:54ダメでしたorz
0911デフォルトの名無しさん
2005/12/01(木) 00:24:28フォントを欧州のやつに変えてみれ。
日本語の\はバックスラッシュと同じ文字コード。
0912デフォルトの名無しさん
2005/12/01(木) 00:26:06入力された整数の分だけ、While回せ
ループの中でprintf("*");
0913デフォルトの名無しさん
2005/12/01(木) 00:35:15rand()で初期乱数から乱数を引っ張る っていう結構一般的な
乱数発生関数を作ったんですが、もっと 散り散りになる乱数の作り方って
ないでしょうか?
0914デフォルトの名無しさん
2005/12/01(木) 00:37:20つ[Mersenne Twister]
0915デフォルトの名無しさん
2005/12/01(木) 00:37:49初心者スレじゃないんかよ!!
ったくわからないならわからんって言えよww
0916デフォルトの名無しさん
2005/12/01(木) 00:41:22ありがとうございます!!なんとなくできました!!
0917デフォルトの名無しさん
2005/12/01(木) 00:44:42(ここはジョンザリッパーの初心者スレじゃないですよ。
ブルートのアルゴリズム解析スレでもないですよ。
質問者の態度っていうものもあると思いますよ。
回答者が出てくれるまで、気長に待ったほうが得策だと思いますよ。
それが待てないのならば、)ソースを読め
0918デフォルトの名無しさん
2005/12/01(木) 00:50:13おぉ なかなか面白そうな。
ヒントありがとうございます。
0919デフォルトの名無しさん
2005/12/01(木) 02:11:44掲示板に書き込む時に見栄えを良くしたいのですが
そのようなアルゴリズム(プログラム)はありますか?
左側の文字列は共に9文字で単純に6文字の空白を
入れただけでは次のようになってしまいます・・・
【例】
あっいaIU++幅 ここに書く
tkahuanたl ここに書く
0920デフォルトの名無しさん
2005/12/01(木) 02:17:18フォントによって違うだろ
0921デフォルトの名無しさん
2005/12/01(木) 02:22:43固定長フォントで全角のみを使うwww
まあ実際、文字の位置あわせというのは簡単なようで、結構難しい。
0922919
2005/12/01(木) 03:03:50いや例えばこの掲示板に書き込むだけなら同じフォントですよね?
>>921
そうですか・・・
左側の列は予め決まった単語ではないので
どうしても計算してだす必要があるんです・・・
0923デフォルトの名無しさん
2005/12/01(木) 03:33:34プログラム言語はなんですか?
0924919
2005/12/01(木) 03:59:30C言語です
0925デフォルトの名無しさん
2005/12/01(木) 04:04:31それを使って計算すればやってできないことはない。
が、かなり面倒だとは思う。
0926919
2005/12/01(木) 04:23:18やっぱりそこまでしないとできないものですか・・・
ヤフーで検索してもそれらしきものがでてこないし・・・
あ 1
あ11
↑今気づいたけど、半角スペースと半角数字の1の幅が違うんですよね・・・
正直これには参った・・・
やっぱり完璧にするのは無理かなぁ
0927デフォルトの名無しさん
2005/12/01(木) 04:33:18プロポーショナルフォントは、すべての文字の文字幅は異なると思ったほうがよい。
だから計算できたとしても、ぴったりではなくて近似なんだよね。
WinAPIのGetCharacterPlacementやGetTextExtentPoint32という関数で文字列の幅の計算が
できるようです。HDCを渡さなくてはいけないんですけど。
0928デフォルトの名無しさん
2005/12/01(木) 05:51:57漢字全て16pxなので3〜15pxのリストを保持するだけでいい。
それはともかく「半角SPは行頭に来れず、連続することもできない」という条件で整形するアルゴリズムを考えるのは楽しそうだ
0929デフォルトの名無しさん
2005/12/01(木) 08:19:350930デフォルトの名無しさん
2005/12/01(木) 10:23:41フォントはブラウザの設定で変し、
掲示板で書き込みできるのは文字情報のみで、
表示されるフォントの情報など存在しない。
そんなに位置合わせをしたいなら、
タグ入力可能な掲示板でtableタグで合わせろ。
0931デフォルトの名無しさん
2005/12/01(木) 10:55:44つーか、AAを否定されてもねw
0932デフォルトの名無しさん
2005/12/01(木) 11:25:54Z2=1.3+0.4i
この和と積を求めて、結果を打ち出すプログラムはどうなりますか?
自分でやってみたんですが、うまくいきません。
誰かわかる方教えてください。
0933デフォルトの名無しさん
2005/12/01(木) 11:45:36http://pc8.2ch.net/test/read.cgi/tech/1132102992/982
0934デフォルトの名無しさん
2005/12/01(木) 15:19:43このサイトの、DISWINでAPIリストを作るという項目をやってるんですが
このサイトのOSは98で自分はXPなのでディレクトリの指定が分かりませんorz
色々試してるんですがMKLISTをどこに指定していいのでしょうか。。
スレ違いだったらごめんなさい
0935デフォルトの名無しさん
2005/12/01(木) 15:39:50つ ttp://mossari.hp.infoseek.co.jp/
0936デフォルトの名無しさん
2005/12/01(木) 17:06:15char *z;
int a;
z = (char *)malloc(a * 2 + 1);
の様に使うみたいですが
(char *)の部分がわかりません。(a * 2 + 1)の部分はa×2+1バイト用意するってことですか?
0937デフォルトの名無しさん
2005/12/01(木) 17:16:36mallocはvoid*型の値を返すから、char*型にキャストしてからzに入れないと
コンパイラに怒られる。
そんでもって(a * 2 + 1)バイト確保してる
0938デフォルトの名無しさん
2005/12/01(木) 17:18:14イマイチわかりませんが、取りあえず書いておけということですね
0939デフォルトの名無しさん
2005/12/01(木) 17:19:05(型名)式
は式を指定した型に変換します。
この場合はchar*型(charへのポインタ型)に変換しているわけですね。
mallocはvoid*型を返し、void*型は代入時に自動的に(左辺のポインタ型に)型変換されるのでこのようなキャストは必要ありません。
可読性や安全性を考えると、むしろやめておいた方がいいでしょう
>>937の2行目と3行目はC++の仕様です
0940デフォルトの名無しさん
2005/12/01(木) 17:34:03その際とのどこにDISWINとやらがあるのか教えてくれ。
0941934
2005/12/01(木) 17:50:18ごめんなさいページのURL貼ったんですがTOPが表示されるっぽいですね
お手数ですが
下のタブの解析・考察(Hacking)→キーディスクチェック解析
→上から10行目の改造講座→初級05の「逆アンセブラを使ってみる2」です
めちゃくちゃ面倒くさいですね・・・すいませんorz
そこにあるAPIリストの作成なんですがXPではどこを指定したらいいのやら・・・
0942デフォルトの名無しさん
2005/12/01(木) 18:09:572kもXPも同じNT系。
だけどXPのデフォルトのインストールフォルダはC:\WINDOWS。
ということでC:\WINDOWS\SYSTEM32
0943デフォルトの名無しさん
2005/12/01(木) 18:15:42コンパイルをすると下のようなエラーメッセージが出てきます。
どうしたらいいのでしょうか?
―――――――エラーメッセージ―――――――
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
hello.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Fatal: ファイル C0X32.OBJ が開けません
――――――――――――――――――――――
と出てきます。
0944デフォルトの名無しさん
2005/12/01(木) 18:22:47スレ違いになるけど、そういうフレームを使ったページは目的の場所で右クリックメニューから
プロパティを出すと中身のアドレスが得られるよ。
で、XPは知らんけどWin2Kと同じなんで内科医?
まぁ、どうなっても私ゃ知らんが。
0945デフォルトの名無しさん
2005/12/01(木) 18:25:32BCCスレで聞くといいと思うよ。
0946934
2005/12/01(木) 18:47:01ありがとうございます!出来ました!
>>944
そんな方法あったんですね。次からそうします!
あとは�d�d拍子にいけるはずです。わざわざありがとうございましたm(_ _)m
0947デフォルトの名無しさん
2005/12/01(木) 18:47:370949デフォルトの名無しさん
2005/12/01(木) 20:04:23#include<stdio.h>
void main()
{
intmonth[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
intyy,mm,dd;
intmonc,con=0;
printf("Please input date (yyyy.mm.dd) ==> ");
scanf("%d.%d.%d",&yy,&mm,&yy);
if(mm > 0 && mm < 13)
if((month[mm-1]+1)>dd){
for(monc=1;monc!=mm;monc++){
//printf("%d\n",con);
con+=month[monc-1];
}
con+=dd;
}
else
printf("ERROR\n");
else
printf("ERROR\n");
printf("Total %d days",con);
}
で//printf("%d\n",con);行のコメントをはずすと正常に動作するのですが、
コメントにしたり行を消したりすると正常に動作しません。
超初歩的な質問かも知れませんがよろしくお願いします。
開発環境はBorland C++ 5.5です。
0950デフォルトの名無しさん
2005/12/01(木) 20:25:36#include<stdio.h>
void main()
{
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int yy,mm,dd;
int monc,con=0;
printf("Please input date (yyyy.mm.dd) ==> ");
scanf("%d.%d.%d",&yy,&mm,&yy);
if(mm > 0 && mm < 13)
if((month[mm-1]+1)>dd){
for(monc=1;monc!=mm;monc++){
//printf("%d\n",con);
con+=month[monc-1];
}
con+=dd;
}
else
printf("ERROR\n");
else
printf("ERROR\n");
printf("Total %d days",con);
}
見にくくてすみません。
0951デフォルトの名無しさん
2005/12/01(木) 20:27:51>scanf("%d.%d.%d",&yy,&mm,&yy);
yy がふたつ。
0952デフォルトの名無しさん
2005/12/01(木) 20:34:05やってしまった・・・見落とし・・。orz
次からは注意します。
0953デフォルトの名無しさん
2005/12/02(金) 00:35:30年数を入力する必要はないし、仮に元日からの日数を求めるんであれば、
1月31日を指定したら62日と帰ってきそうなんだが。
0954デフォルトの名無しさん
2005/12/02(金) 09:14:26#include<stdio.h>
void main()
{
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int yy,mm,dd;
int monc,con=0;
printf("Please input date (yyyy.mm.dd) ==> ");
scanf("%d.%d.%d",&yy,&mm,&dd);
if(mm > 0 && mm < 13)
if((month[mm-1]+1)>dd){
if(yy%4==0 && yy%100!=0)
month[1]=29;
for(monc=1;monc!=mm;monc++){
con+=month[monc-1];
}
con+=dd;
}
else
printf("ERROR\n");
else
printf("ERROR\n");
printf("Total %d days",con);
}
完成しました。
入力した年月日を入力し、元日からの日数を求めるプログラムです。
年を入力する必要があったのは閏年の判定をする為です。
0955デフォルトの名無しさん
2005/12/02(金) 09:24:40100年判定入れるなら400年判定入れないと2000年がおかしくなる。
0956デフォルトの名無しさん
2005/12/02(金) 09:27:07if(yy%400==0 || (yy%4==0 && yy%100!=0))
0957956
2005/12/02(金) 09:27:520958デフォルトの名無しさん
2005/12/02(金) 09:36:36if(yy%400==0 || (yy%4==0 && yy%100!=0))
month[1]=29;
if((month[mm-1]+1)>dd){
for(monc=1;monc!=mm;monc++){
con+=month[monc-1];
}
con+=dd;
}
}
お早いレスありがとうございます。判定の位置もおかしかったので修正
しました。これからも精進します。
0959デフォルトの名無しさん
2005/12/02(金) 10:28:54過去は振り返らないのさ。
0960デフォルトの名無しさん
2005/12/02(金) 22:29:32長い未来を見据えず、mktime()で算出するのはいかが?(w
0961デフォルトの名無しさん
2005/12/03(土) 10:44:15f(x) = x*x ( x=-4, -3, ..., 0, 1, ..., 4)
0962デフォルトの名無しさん
2005/12/03(土) 10:50:290963デフォルトの名無しさん
2005/12/03(土) 11:07:200964国士
2005/12/03(土) 14:18:550965デフォルトの名無しさん
2005/12/03(土) 14:22:250966デフォルトの名無しさん
2005/12/03(土) 14:42:42とかやったときのaが代入演算子。ようするに演算子を代入するもののことだ
0967デフォルトの名無しさん
2005/12/03(土) 14:51:28ワロタ
0968デフォルトの名無しさん
2005/12/03(土) 16:20:50f(x),g(x),h(x)とあれば、diff_fx(float x),diff_gx( float x),diff_hx( float x)みたいに3つ作るくらいしか考えられませんでした
diff_fx( float x) の内容は、手計算でf(x)の導関数を求めて、それを書き込んでというどうしようもない状態です(ノд`)
0969デフォルトの名無しさん
2005/12/03(土) 16:30:53あらかじめ関数が決まっているなら精度的にはそれが一番いい方法。
0970デフォルトの名無しさん
2005/12/03(土) 16:39:25関数決まってないなら
f'(c) = lim[h→0]{(f(h+c) - f(c))/h}
を使って、h=0.000000001とでもしてやるしかないんじゃまいか?
0971デフォルトの名無しさん
2005/12/03(土) 16:48:51確かにこれでも問題なく動くのですが、汎用性が全くないなぁと思いまして
関数変える度に、導関数も求め直すのも結構手間ですし
>>970
定義に従って微分していくということですか
試してみます
ありがとうございました
0972デフォルトの名無しさん
2005/12/03(土) 16:51:38それは小さすぎ。普通の多項式でもひどい誤差になる。
中心差分でも10の-5乗くらいが限度かと。
0973デフォルトの名無しさん
2005/12/03(土) 16:54:100974デフォルトの名無しさん
2005/12/03(土) 16:54:46hは適当に書いてみた。スマンカッタ
0975デフォルトの名無しさん
2005/12/03(土) 16:57:17>>1を読んで出直したら?
0976デフォルトの名無しさん
2005/12/03(土) 17:00:190977デフォルトの名無しさん
2005/12/04(日) 15:45:410978デフォルトの名無しさん
2005/12/04(日) 16:02:01else puts("NG!");
0979977
2005/12/04(日) 16:17:46自分ではこう書きましたがダメでした。
#include<stdio.h>
int main(void)
{
int x;
scanf("%c",&x);
if(x=='c'){
printf("OK!\n");
}
else{
printf("NG!\n");
}
return 0;
}
0980デフォルトの名無しさん
2005/12/04(日) 16:38:07intで宣言して%cで受けるのはおかしいだろがッ
とりあえずchar xに汁
0981977
2005/12/04(日) 16:58:59出来ました。
でも、「cc」でも「OK!」と出てしまいます。
0982デフォルトの名無しさん
2005/12/04(日) 17:25:52・・・・scanfが何してるか考えてるか?
0983977
2005/12/04(日) 17:30:52キーボードから数値を取り込む関数?
すみません。激初心者ですorz
0984デフォルトの名無しさん
2005/12/04(日) 17:33:00http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla%3Aja-JP%3Aofficial_s&hl=ja&q=scanf&lr=lang_ja&btnG=Google+%E6%A4%9C%E7%B4%A2
0985977
2005/12/04(日) 17:42:37scanf("%c",&x);
if(a=='c')
この辺が間違ってる様な希ガス
0986977
2005/12/04(日) 17:47:33scanf("%c",&x);
if(x=='c')
こうか
0987デフォルトの名無しさん
2005/12/04(日) 17:48:43http://pc8.2ch.net/test/read.cgi/tech/1131282679/
こちらで。
0988デフォルトの名無しさん
2005/12/04(日) 17:52:24scanfの%cは文字一文字を受け取ることを示します。
つまり
char c;
scanf("%c",&c);
は標準入力からcに一文字入れるということです。
0989977
2005/12/04(日) 17:55:26int main(void)
{
char x;
scanf("%c",&x);
if(x=='c'){
printf("OK!\n");
}
else{
printf("NG!\n");
}
return 0;
}
ccと入力してもON!にするにはどうしたら?
0990977
2005/12/04(日) 17:56:160991デフォルトの名無しさん
2005/12/04(日) 18:09:51fgetsぐらい使え」
0992デフォルトの名無しさん
2005/12/04(日) 18:33:30#include <string.h>
int main(void){
char c[3];
fgets(c,sizeof(c),stdin);
if(c[strlen(c)-1]=='\n')
c[strlen(c)-1]='\0';
else{
puts("NG");
return 0;
}
if(!strcmp(c,"c")) puts("OK");
else puts("NG");
return 0;
}
冗長だと思ったら改行文字除去削って比較文字列に改行文字加えれ
0993977
2005/12/04(日) 18:40:46すいません。そこまで習っていません。
習ったのは
printf関数
scanf関数
if文
else if文
for文
等です。
これらで>>977は出来るはずなんだけどなぁ
0994デフォルトの名無しさん
2005/12/04(日) 18:48:39配列は習った?
習っていないなら2文字以上の入力は考えなくてもいいはずだ
0996デフォルトの名無しさん
2005/12/04(日) 19:18:19乙
でも,そしたら993のような香具師はスルーされるかもな
初心者は2chじゃなくて,K&R読んで勉強汁ってことか
0997デフォルトの名無しさん
2005/12/04(日) 19:19:050998デフォルトの名無しさん
2005/12/04(日) 19:20:34薬師?
0999デフォルトの名無しさん
2005/12/04(日) 19:25:37これでおk
#include<stdio.h>
int main(void)
{
char x,y;
if((scanf("%c%[^\n]%*c",&x,&y)==1)&&(x=='c'){
printf("OK!\n");
}
else{
printf("NG!\n");
}
return 0;
}
1000デフォルトの名無しさん
2005/12/04(日) 19:28:04C言語なら俺に聞け! Part 117
http://pc8.2ch.net/test/read.cgi/tech/1131282679/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。