C言語質問スレ【激初心者】

このエントリーをはてなブックマークに追加
661デフォルトの名無しさん
//暗号キーの入力
printf("暗号キーを入力してください>");
scanf("%s",key);
keylen=strlen(key);

//原文ファイル(入力ファイル)オープン
fp=fopen(filename,"rb");
if(!fp){
printf("エラー1ファイルオープンエラー\n");
exit(1);
}
printf("原文ファイルオープン完了\n");

662デフォルトの名無しさん:2005/11/19(土) 23:09:02
//暗号化ファイル(出力ファイル)オープン
strcpy(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);が悪さをしているのはわかったのですがそこからがわかりません。
よろしくおねがいします。
663誤爆してしまましたこれが一番上にきます: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);
}
664デフォルトの名無しさん:2005/11/19(土) 23:15:12
wfpにfopenしてなくないか?
665デフォルトの名無しさん:2005/11/19(土) 23:21:33
してます
666デフォルトの名無しさん:2005/11/19(土) 23:22:24
どこで?
667デフォルトの名無しさん:2005/11/19(土) 23:45:09
if(!wfp){
printf("エラー2ファイルオープンエラー\n");
exit(1);
}
668デフォルトの名無しさん:2005/11/19(土) 23:46:25
なんだネタか
669デフォルトの名無しさん:2005/11/19(土) 23:53:00
fopenはどこ?
てか、誤爆した挙句ネタなのかよ
670デフォルトの名無しさん:2005/11/20(日) 09:42:25
>>664
ありがとうございます。
strcpy(outfilename,filename);
strcat(outfilename,"_");
wfp=fopen(outfilename,"wb");
if(!wfp){
でおkみたいです。fopenし忘れる初歩的なミスでスレを汚してしまいました。
すいませんでした。
671デフォルトの名無しさん:2005/11/20(日) 20:17:53
printf( "\\ is escape letter\n");

などと書いた場合に、エスケープシーケンスの部分\\の解釈
はプリプロセッサが行うのでしょうか?
672デフォルトの名無しさん:2005/11/20(日) 20:19:44
いいえ
673デフォルトの名無しさん:2005/11/20(日) 20:20:44
ビルゲイツが行います
674671:2005/11/20(日) 20:21:53
コンパイラが行うのでしょうか?
675デフォルトの名無しさん:2005/11/20(日) 20:24:41
はい
676デフォルトの名無しさん:2005/11/20(日) 20:25:58
いいえ
677デフォルトの名無しさん:2005/11/20(日) 20:26:04
ウインドウを表示するプログラムをコンパイルしたのですが、
外部シンボル ’_main’が未解決 (C:\borand\bcc55\lib\cox32.obj が参照)
っていうエラーがでます。
どういう意味ですか?
678デフォルトの名無しさん:2005/11/20(日) 20:30:06
WinMain()がスタートアップだったら、コンパイラオプションでなんか指定してやらんといかんかったはず。
当該スレへ。
679677:2005/11/20(日) 20:32:33
難しいですね・・・。
とりあえずCスレではないのですね。ありがとうございました。
それでは逝ってきます。
680デフォルトの名無しさん:2005/11/20(日) 21:06:09
すみません。ある文字列を配列に入力してenterキーが入力されたらそこに!
をいれて表示するっていうプログラムを関数つかって作ったんですけど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);
}
681デフォルトの名無しさん:2005/11/20(日) 21:08:55
まあ・・・きちんと本を読むのがいいぞ。うん。
682デフォルトの名無しさん:2005/11/20(日) 21:12:43
20文字確保したら、インデックスは0-19しか使えないよ。
683デフォルトの名無しさん:2005/11/20(日) 21:15:30
なんか日曜の夜に激しい釣りを見ているキガス。

とりあえず、return ho[20]は何のために書いた?
s[20]=ho(na)も。
684680:2005/11/20(日) 21:18:12
Linuxでenterキーのアスキーコードは72でいいんですよね?
Segmentation faultってことは
メインと関数の間で受け渡しがうまくいってないってことですか?
685デフォルトの名無しさん:2005/11/20(日) 21:21:40
ホント釣り名人だね680は
Segmentation fault の直接の原因は ho関数先頭の int i の初期化忘れ。
686680:2005/11/20(日) 21:35:08
s[20]=ho(na)ってのはna配列についてho関数を使うってことで
return ho[20]ってのはho関数の結果として返してるってことですよね?
あと初期化したら入力の時点で回り続けるようになりました。
687デフォルトの名無しさん:2005/11/20(日) 21:48:42
s[20]=ho(na)ってのはna配列についてho関数を使うってことで
return ho[20]ってのはho関数の結果として返してるってことですよね?

s[20]=ho(na)ってのは20要素確保されたsの21番目にhoの返り血を代入するってことで
return ho[20]ってのは引数hoの21番目の要素を返すってことです。

>入力の時点で回り続けるようになりました。
要するに無限ループに陥ったと。= と == の違いについて調べたまへ。
688デフォルトの名無しさん:2005/11/20(日) 22:05:50
16進数を2進数に変換して文字列として格納するんですが、
0x12341234 => 00010010 00110100 00010010 00110100
のようにバイトに区切って1バイト毎に格納するプログラムを作りたいんです。
単純に2進数に変換するだけならできるんだけど区切る方法が思いつかなくて・・・お願いします
689デフォルトの名無しさん:2005/11/20(日) 22:08:28
このスレの激初心者は飾りか?
激初心者を誘っといて釣り呼ばわりしてストレス解消とはたちの悪い奴らだな。
690680:2005/11/20(日) 22:10:34
配列として受け取るにはchar ho(char ho[])ってすればいいんですか?
でもそうするとreturnがわかりません。あとメイン側もs=ho(na);に
してみましたがこれでよいのでしょうか?
691デフォルトの名無しさん:2005/11/20(日) 22:13:09
変換したい数をxとして、
単純に1バイトを2進文字列にする関数を引数(x >> 24) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数(x >> 16) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数(x >> 8) & 0xffで呼ぶ
末尾に空白を追加
単純に1バイトを2進文字列にする関数を引数x & 0xffで呼ぶ
692デフォルトの名無しさん:2005/11/20(日) 22:13:46
>>690
とりあえず言っておくと、配列を返すことは出来ない
693688:2005/11/20(日) 22:14:33
>>691
激サンクス!
694デフォルトの名無しさん:2005/11/20(日) 22:23:09
配列を引数で受け取ることもできない。
引数で渡しているのは、配列先頭を指すポインタ。
695680:2005/11/20(日) 22:24:09
>>692じゃあ配列の中身を返すのを回すのですか?
あとho関数の最初のiの初期化ですがi=1を加えると無限ループになってしまうのですがこれはまちがっているんですか?
696デフォルトの名無しさん:2005/11/20(日) 22:34:18
別の配列に入れたいんなら、その配列も一緒に渡すようにすれば?
ho(na, s)って言う感じに
697デフォルトの名無しさん:2005/11/20(日) 22:47:07
>>689
680みたいなコード見ると昔の自分を思い出して恥ず〜で「釣り」って書いちゃうんだよ
サポートはサポートでやってるんだからそう怒るんって。

>>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 になってたわけだわな。
698688:2005/11/20(日) 22:51:38
すまん、いざ作ってみようと思ったが全然ダメだった・・・
軽くでいいからヒントお願いします・・orz
699680:2005/11/20(日) 22:57:14
もうなにがなんだかわかんなくなったので具体的にどうすりゃいいか
答えおしえてください。ごめんなさい
700デフォルトの名無しさん:2005/11/20(日) 22:59:52
あきらめろ。
701デフォルトの名無しさん:2005/11/20(日) 23:05:05
>680 まあ、誉められた方法ではないが。
int main(void) {char buf[100]; while (gets(buf)) printf("%s!\n", buf); return 0;}
702680:2005/11/20(日) 23:11:35
Linuxとg++だとgetsでエラーがでます。
配列と関数では無理ってことですか
703デフォルトの名無しさん:2005/11/20(日) 23:13:50
>>702
getsはバッファオーバーランなどの危険が伴うから。
fgets使え。
704デフォルトの名無しさん:2005/11/20(日) 23:15:25
あー。エラーちゅうか警告な。メンドイんで、書いてしまった。
int main(void) {char buf[100]; while (fgets(buf, 100, stdin)) printf("%s!\n", buf); return 0;}
705680:2005/11/20(日) 23:18:11
せっかく教えてもらったのにあれだけど>>680をなおしてもらえませんか?
706680:2005/11/20(日) 23:44:30
Linuxのenterってアスキーコードでなにですか?
707デフォルトの名無しさん:2005/11/20(日) 23:55:44
>>706
LF
ただしCではどんな環境でも改行文字は'\n'と定められている。
(たとえばWindowsでは入出力時に\r\nと\nの変換が行われている)
708デフォルトの名無しさん:2005/11/20(日) 23:59:18
バッファオーバーランってなんですか?
具体的にそれがどういうことをされると、どういった危険が伴うんですか?
709デフォルトの名無しさん:2005/11/21(月) 00:05:55
まずはぐぐれ
710デフォルトの名無しさん:2005/11/21(月) 00:07:24
>>708
バッファオーバーランとは本来実行するコードやそこへのアドレスが書かれたメモリにデータが書き込まれてしまうこと。
華麗に悪用されるとクラッカーにプログラムの実行を乗っ取られてしまう。
ウィルスを仕込んだり機密データを読み取ったりその気になれば自由自在。
711デフォルトの名無しさん:2005/11/21(月) 00:20:06
説明が逆だな。間違っちゃいないけど。
712デフォルトの名無しさん:2005/11/21(月) 01:11:15
2つの文字列が同じなら〜を実行っていうプログラムを書きたいんですが
char str1[] = "aaa";
char str2[] = "aaa";
if(str1 == str2){
・・・・

ではうまくいきません
どうすればいいんでしょう
713デフォルトの名無しさん:2005/11/21(月) 01:13:22
>>712
入門書でも読めば?
そんなレベルの質問をずっと続けるつもりですか?
714デフォルトの名無しさん:2005/11/21(月) 01:20:09
ごめんなさい
715デフォルトの名無しさん:2005/11/21(月) 01:33:51
そして誰も来なくなった
716デフォルトの名無しさん:2005/11/21(月) 01:43:32
ここは激初心者にやさしくないスレですね。
717デフォルトの名無しさん:2005/11/21(月) 01:44:33
バッファーオーバーランはどうやって埋め込んだコードを実行するのか知らなかったので
調べたらこれが分かりやすかった
http://www.ipa.go.jp/security/awareness/vendor/programming/b06_01.html
スタックの構造知ってたら当たり前のことなのね・・・

>>712
ヒント:strcmp
718デフォルトの名無しさん:2005/11/21(月) 01:45:58
>>712
char str1[ ] = {aaa};
以下同様に...
719デフォルトの名無しさん:2005/11/21(月) 01:51:27
>>717
ありがとうございます。
一文字ずつ比べてたorz
720デフォルトの名無しさん:2005/11/21(月) 22:24:20
文字列の入力でEOF文字が入力されると処理を終了するってのを作りたいんだけど、
判定文って
scanf("%s" , str ) == EOF
じゃだめなの?
721デフォルトの名無しさん:2005/11/21(月) 23:35:43
scanf は引数の解析がワヤなねんの意味でEOFを返すんで
終了させたかったら CTRL+Z なり CTRL+D なり打ってってね、
という了解の上ならそれで良いんじゃないの。
722デフォルトの名無しさん:2005/11/22(火) 00:52:51
止めた方がいいと思うなぁ。
723デフォルトの名無しさん:2005/11/22(火) 10:02:20
#defineで定義するマクロに、配列を引数として使うにはどうしたらいいんですか?
724デフォルトの名無しさん:2005/11/22(火) 10:50:04
先ずは初心者らしく、やりたいことを具体的に書きなさい。
725デフォルトの名無しさん:2005/11/22(火) 14:02:46
先生方すいません、質問です。
計算結果を出力しようとしたら
1.#QNANO
って出るんですが↑ってどうゆうことですか?
726デフォルトの名無しさん:2005/11/22(火) 14:06:14
先ずは初心者らしく、問題のプログラムを貼りなさい。
727デフォルトの名無しさん:2005/11/22(火) 14:11:31
printf("1.#QNANO\n");
728デフォルトの名無しさん:2005/11/22(火) 14:21:47
すいません。
プログラムがかなり長いので‥w
printf("%3f %f\n",s,ins[i]);
↑でsの値とins[i]に格納した値を出力しようとしたら
0.001000 1.#QNANO
と出力されてしまいましたw
729デフォルトの名無しさん:2005/11/22(火) 15:09:20
>>728
恐らく、ins[i]がfloat型かdouble型じゃないか、配列の中身が壊れているんジャマイカ。
直前にins[i] = 0;すれば0が出力されるはずだ。
或いは、ins[i] + ins[i]を出力しようとしてみても何かわかるかも知らん。
730728:2005/11/22(火) 15:25:24
>>729
レスありがとうございます!
ins[i]はdouble型です。
ins[i]=0;を直前にいれると
0.001000 0.0000000
と出力しました。
ins[i]+ins[i]を出力しようとすると
0.001000 1.#QNANO
と出力されてしまいました。。
731デフォルトの名無しさん:2005/11/22(火) 15:43:36
>>730
そうなると、配列の中身が壊れている。
壊れている原因はこんなもんかな。
・0割り算した結果が格納された
・初期化されていない
・他の配列操作か何かで上書きされた
732デフォルトの名無しさん:2005/11/22(火) 16:22:36
#include <stdio.h>
#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 );
}
733デフォルトの名無しさん:2005/11/22(火) 16:23:58
int main(){
char 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*'というエラーが出ます。
どこを手直しすればよろしいのでしょうか?よろしくお願いします。
734デフォルトの名無しさん:2005/11/22(火) 16:32:30
>>733
>どこを手直しすればよろしいのでしょうか
該当個所だけでなく、あちらこちら。
配列について勉強しなおせ。
735デフォルトの名無しさん:2005/11/22(火) 16:56:38
printf()のような可変個数の引数をとる関数のラッパー関数の
作り方を教えてください。例えば Wprintf()というものを

int Wprintf(int a, const char *format,...)
{
if(a < 0) return -1; /* もし第1引数が負ならば即終了 */
else printf(format,...); /* ここで第2引数以下全てをprintf()に渡したい */

return 0;
}

な感じにしたいんですが printfにどうやって第2引数以下全ての引数を渡せばいいんでしょうか。
736デフォルトの名無しさん:2005/11/22(火) 16:57:25
>>735
つ[vprintf()]
737デフォルトの名無しさん:2005/11/22(火) 17:16:12
>>733
第1パラメータ。
なんだけど、どうやら数値と文字列の区別がついてない模様。
738728:2005/11/22(火) 17:19:39
>>731
台形公式を使った定積分の数値計算なので
式のどこかで0で割ってしまっているかもしれません。
初期化、上書きは問題ないようなので
もう一度式を洗い直してみます。
ご教授ありがとうございました!
739デフォルトの名無しさん:2005/11/22(火) 17:35:01
IPを収得する方法がわかりません
どなたか教えてください
740デフォルトの名無しさん:2005/11/22(火) 17:42:33
>>736
ありがとうございます。解決しました。
741伝説新人タクシ:2005/11/22(火) 18:19:20
>>739
MSDOSでnslookupと打てばわかる。もしくは、教えてくれるサーバに行く。
マジレスすると、DNSサーバに問い合わせる。
ポート番号は・・・・。
742デフォルトの名無しさん:2005/11/22(火) 19:02:39
>>741
すみません言葉不足でした。
自PCのIPアドレスを収得したいのですが?
743デフォルトの名無しさん:2005/11/22(火) 19:08:29
前回のリターン入力から今回のリターン入力までの経過時間を測定したいのですが
リターンをそれぞれ読み込むにはどのようにすればいいでしょうか。
744デフォルトの名無しさん:2005/11/22(火) 19:17:56
>>742
必ず127.0.0.1と決まっています。
745739:2005/11/22(火) 19:27:01
解決しました、
本当にありがとうございました
746デフォルトの名無しさん:2005/11/22(火) 21:06:18
>>743
getchar 使うのが一番わかりやすいかな?
int c;
while ((c = getchar()) != EOF) {
if (c == '\n') {
/* ここで時間を計る */
}
}
747伝説新人タクシ:2005/11/22(火) 21:15:50
>>739
Cプログラムでないなら、板違い。質問すれをすすめます。
127.0.0.1も間違ってはないが>>739はなんで知りたかったんだろう。
748デフォルトの名無しさん:2005/11/22(火) 21:28:39
728さんは納得して去っていったみたいだけど・・・
QNANDって "Quiet Not A Number Division" 例外のことで合ってますよね?
749デフォルトの名無しさん:2005/11/22(火) 23:35:32
2次元配列で文字列を出力したいのですが
printfで確かめてる最中、変な事が起きました

#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に変えたら順次出力されたのですが、これはなんででしょうか
750デフォルトの名無しさん:2005/11/22(火) 23:45:59
>>749
・scanf()の仕様をよく読んでください。
#改行コードは何のためにつけているのですか?
・gets()は使ってはいけません。
#代わりにfgets()が使えます。
・配列の要素数が999個というのは何のメリットもありません。
#判りやすく1000個としてみては如何でしょうか。
751デフォルトの名無しさん:2005/11/22(火) 23:49:44
>・scanf()の仕様をよく読んでください
ごめんなさい、よくわかりません

>・gets()は使ってはいけません。
今のところ学校でscanfとgetsしか習ってないもので

>・配列の要素数が999個というのは何のメリットもありません。
解りました、1000にしてみます
752デフォルトの名無しさん:2005/11/22(火) 23:56:30
>>751
scanf( 書式指定文字列 , アドレス);
753デフォルトの名無しさん:2005/11/22(火) 23:58:50
>751は天然なのか、意図的に>750の#行を読み飛ばしているかのようだ。
754デフォルトの名無しさん:2005/11/23(水) 00:03:41
scanfって仕様が難しいのによく最初に教えるもんだな
755デフォルトの名無しさん:2005/11/23(水) 15:01:19
CとC++って何か違うのですか?
Borland C++ Compiler というのでCのコンパイルはできますか?
756デフォルトの名無しさん:2005/11/23(水) 15:14:15
WindowsXPでバックスラッシュの半角がだせません。誰か教えてくれませんか?
757デフォルトの名無しさん:2005/11/23(水) 15:21:23
\
758デフォルトの名無しさん:2005/11/23(水) 16:11:06
たとえばn=4と入力した時に

*
**
***
****

↑このように出力するプログラムはどうやって作ればいいんでしょう。どなたか教えてください('A`)
759デフォルトの名無しさん:2005/11/23(水) 16:25:25
>>758
それを他人に図を使わずに説明しようと試みてください。
ほぼそれがプログラムになります。
760758:2005/11/23(水) 16:31:01
>>759
自己解決しました。ありがとうございます。
761デフォルトの名無しさん:2005/11/23(水) 16:31:34
fgets(buf, 256, stdin);
sscanf(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の最初の数字を何回も配列に放り込んでいくだけにしかならないんですが。
762デフォルトの名無しさん:2005/11/23(水) 16:55:11
>>761
strtok でトークンを切り出して atoi で変換というのが方法の一つですね。
それから質問は揚げていきましょう。
763デフォルトの名無しさん:2005/11/23(水) 16:56:52
>>761
sscanfだと無理なんじゃないかな。
数値のみならstrtolでループ回せば出来る。
764デフォルトの名無しさん:2005/11/23(水) 16:58:25
>>761

int 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);
765デフォルトの名無しさん:2005/11/23(水) 16:59:02
初心者相手だからって、随分程度低いのが多いなぁ。
766761:2005/11/23(水) 17:20:55
>>762-764
ありがとうございます。
試してみます。
767デフォルトの名無しさん:2005/11/23(水) 19:11:24
757に補足すると日本語フォントでは半角バックスラッシュの位置に半角円記号が搭載されているから\で良いということになる。

>>755
できる。拡張子cだとCとしてコンパイルされて、拡張子がcppなどだとC++としてコンパイルされる。
けれどCの勉強をするのであっても基本的には拡張子cppにしてC++コンパイルにするほうが良い。
なぜならC++のほうがエラーチェックが厳しくなっているから。
768デフォルトの名無しさん:2005/11/23(水) 20:32:36
>>767
馬鹿に馬鹿な事を言うな馬鹿
769デフォルトの名無しさん:2005/11/23(水) 21:21:25
#include <stdio.h>

main [] {
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 ***

とエラーがでます
どうすればいいのでしょうか?
770デフォルトの名無しさん: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;
771デフォルトの名無しさん:2005/11/23(水) 21:23:11
>>769
[]を()に置き換えろ。
772デフォルトの名無しさん:2005/11/23(水) 21:23:18
コンパイルの仕方がわからん?
773770:2005/11/23(水) 21:23:23
(770の続き)
/*データの和の計算*/
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);
}
774770:2005/11/23(水) 21:26:04
実行すると、分散と標準偏差が+NANと表示されてしまいます。
何かプログラムに問題があると思うんですが・・・どなたかご指摘よろしくお願いします。
775デフォルトの名無しさん:2005/11/23(水) 21:31:00
>>774
多分入力時の改行コードの問題。
配列をクリアもしてないからわけわからん値での計算になる。
776デフォルトの名無しさん:2005/11/23(水) 21:31:33
>>771
できました、ありがとうございます
半角入力の時に()を打つときはどうすばいいのでしょうか?
さっきはコピペで済ませましたが・・・
777デフォルトの名無しさん:2005/11/23(水) 21:35:46
>>776
IMEをOFFにしてShift+8や9でできるだろ。全角と何か違いがある?
778デフォルトの名無しさん:2005/11/23(水) 21:37:28
>>777
8と9に()があるのに気づきませんでした('A`)
全角括弧にしたらエラーがでたので
どうもありがとうございます
779デフォルトの名無しさん:2005/11/23(水) 22:30:11
ソースファイル自動整形ツールでいいのありませんか?
780デフォルトの名無しさん:2005/11/23(水) 22:44:11
>>774 doubleは%fだッ
781デフォルトの名無しさん:2005/11/23(水) 23:13:15
すみません。急遽仕事でC++をやることになって最近勉強を開始した
初心者です。いくつか疑問点に教えていただけないでしょうか。
派生クラスのメソッドが基本クラスのメソッドを呼び出せるのは分かるのですが
逆はできるのでしょうか?
あるメソッド内で宣言されたオブジェクトはそのメソッドを抜けたら自動的に消えるのですか?
消えるとしたらオブジェクトのメンバのデータも一緒に消失するのですか?
あるメソッド内でnewで動的に取得された構造体配列を他のメソッドから参照できるようにすることは
可能ですか?
以上、どうか宜しくお願いいたします。
782デフォルトの名無しさん:2005/11/23(水) 23:19:45
>>781
virtualメソッドでオーバーライドすればいい。
ローカル定義は消える、ヒープだと消えない。
クラスの定義次第だが、普通デストラクタで消す。
可能。っつーか、できなきゃ何のためにクラス変数があるのかわからん。
783デフォルトの名無しさん:2005/11/23(水) 23:26:27
>>781
(1)限られた状況で可能。
(2)(3)オブジェクトは関数などのスコープを抜けると、クラスで
あればデストラクタが呼び出されて、そのオブジェクトによって
静的に確保された領域が開放される。
(4)あるメソッド内で動的に確保された領域へのポインタを保存して
おけば、できる。ただし、デストラクタでの開放を忘れないように。

スレ違い。
784デフォルトの名無しさん:2005/11/23(水) 23:33:44
>>782
すばやいお返事ありがとうございました。調べてみたいと思います。
最後の質問についてなんですが、クラス変数に構造体配列を設定できる
ということでしょうか。
その場合配列の大きさはメソッドから動的に定められるのですか?
定められるとしたらキーワードだけでもいいので方法を教えて
いただけないでしょうか。
この点だけお願いいたします。
785デフォルトの名無しさん:2005/11/23(水) 23:45:02
>>783
時間差でレスしていただいたんですね。
ありがとうございました。調べてみます。
786デフォルトの名無しさん:2005/11/24(木) 00:14:27
>>784
配列の大きさは配列の大きさを持つ変数を別途用意する。
787デフォルトの名無しさん:2005/11/24(木) 03:49:32
厨がツクールでやりがちなこと3
http://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; }
788デフォルトの名無しさん:2005/11/24(木) 16:03:33
すいません、質問です。
PDFファイルを開いて、VC++で作った画面に表示をさせたいのです。
そのためには、Acrobat SDKを使用すれば可能でしょうか?
それとも、Acrobat SDKを使用しないでAPIみたいのがあるのでしょうか?
789デフォルトの名無しさん:2005/11/24(木) 16:40:50
そもそもAcrobat SDKには何が入っているかは知らないけど、
少なくともPDFはオートメーションサーバになっているはずだから、
その気になればVC++付属のPratform SDKだけでもできる。
790デフォルトの名無しさん:2005/11/24(木) 17:28:56
>>788
まず、PDFのファイル構造を理解しているのか?と問いたい。


# 後、自力で解析すればどうにでもなる。
791デフォルトの名無しさん:2005/11/24(木) 18:24:43
scanfを使って数字を代入すると勝手に改行してしまうんですけど
改行させない方法があれば誰か教えてください。
792デフォルトの名無しさん:2005/11/24(木) 19:45:12
int *p = NULL;
p = new int[0];
とするとpはどうなるんでしょうか
793デフォルトの名無しさん:2005/11/24(木) 20:31:09
>>792
要素のない配列が割り付けられる。By X 3014:2003 (ISO/IEC 14882 :2003)
だからC++はスレ違いっだってば!
794デフォルトの名無しさん:2005/11/24(木) 23:19:50
二次元配列で
new[5000][5000]くらいのでっかいの作りたいのですが、どうもうまくいきません
intやdoubleで宣言して

どうやったら大きな配列が確保できるでしょうか
795デフォルトの名無しさん:2005/11/24(木) 23:22:12
リンカオプションでスタックサイズを変えるか、
malloc等で動的確保。
796デフォルトの名無しさん:2005/11/24(木) 23:30:47
#include <stdio.h>
int 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次元配列の容量を見ようとしたらとまって
797デフォルトの名無しさん:2005/11/24(木) 23:34:16

だから、でかすぎるんだよ
798デフォルトの名無しさん:2005/11/24(木) 23:37:39
#include <stdio.h>
#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);
}

これだと落ちます
どうにかしてでかい配列扱いたいのですが
799デフォルトの名無しさん:2005/11/24(木) 23:38:42
>>796
関数内で宣言した変数のために使えるメモリは意外と小さい。(通常1MiBytes程度)
動的確保するのが理想だが,とりあえずは796の配列変数を全て静的変数にしてみろ。
char ac[5000][5000];→static char ac[5000][5000];
800デフォルトの名無しさん:2005/11/24(木) 23:40:47
>>798
> int a[1000][1000];

どうしてこれ残してるんだよ。
801デフォルトの名無しさん:2005/11/24(木) 23:42:16
>>799
できたできたー
今まで悩んでいたのがウソのようだ
助かりました、ありがとぅ〜
ありがとありがとありがと
802デフォルトの名無しさん:2005/11/25(金) 03:54:44
C言語は 独学で学べますか? 独学では限界がありますか? よく本屋にいろいろありますが 読んでもあまりよく分かんないです やっぱり独学は難しいですかね
803デフォルトの名無しさん:2005/11/25(金) 06:05:05
お前には無理だ
804伝説新人タクシ:2005/11/25(金) 13:24:12
坊やだからさ。
Aはふつう教えてないけど、でも学校で教えるのはBまでさ。
Cは自分でしなさい。Dは・・・・。っと
ここにもゆとーり教育の成果物が出てるな。
自分でしねえ、できねえヤシができるようになるわけねぇだろが。バカwww
そのコメントは「独学じゃあ無理ですよね!」って言いたげだな、ヲイ。
貴様が理解できない理由は 独 学 の せい じゃ な い。
あまり分からないだって?実際はまったく分からないんだろう。
学校とかで教えている内容のほうが屑だぞ。
まあ、勉強でも何でもして視野を広げられるようにしたほうがいいよ。
805デフォルトの名無しさん:2005/11/25(金) 13:28:49
どこが 激初心者スレ なんだよ 結局叩くやつしかいないじゃん 典型2ちゃんって感じ
806デフォルトの名無しさん:2005/11/25(金) 13:30:36
>>802
無理ですから、専門学校に行って下さいね。
807伝説新人タクシ:2005/11/25(金) 13:45:53
>>805
勉強することは自信が持てたり、視野が広がったり、
多くのものを得られるのは事実だろう。
しかし、だからこそ教えてやらねばならんのだが扱いが>>802のように
難しいリアル厨などがいる。
彼らは勉強の方法すらその前にして自分も世界も若さゆえに知らんのだ。
2chとて礼節を弁え、スレを尊ばんとする者も居る。
さりとて、住人もリアルに生きているし、>>802のような若人には
厳しさも肝要。知らずにマルチもするだろう。
君も何れ大人になれば分かるときがくる。
808デフォルトの名無しさん:2005/11/25(金) 16:50:18
>>802
独学でも出来る
とりあえず、Linuxとかgnuのソースでも持ってきて何か一つ解析してみれば?
それが終ったら自分でそれのコピーを自分で書いてみる
これが出来れば大丈夫

809デフォルトの名無しさん:2005/11/25(金) 18:17:47
こらこら,みんな大げさすぎる。
810半人前:2005/11/25(金) 23:37:49
初めてのCとかCの絵本とか買え。
とりあえず初心者向け。
それと解らないのは読んでるからだ。
プログラムなんかやったことないやつが読んで理解できるわけないだろ。
ある程度基礎積んでるから他の言語の本読んでもわかる人いるけど
まるっきり初心者なら本買ってきて実際ににやりなさい。
ただ気をつけてほしいのは本に書いてるのをやると実際動く。
それで理解した気にならないでほしい。本のは正解、動いて当然。
それよりもどこがどうなって動いたのか、読み解けるようになれ。
まぁ、それが解析と言うやつだ。それが出来るようになったら、別の本を買え。
君がどこまでマスターしたいのか知らんがC言語における一般的なマスターと言うのは
プログラミング言語C ANSI規格準拠 第2版
を読み解けることだと私は思っている。

最後に二言、美しいプログラムを書け。
見てごちゃごちゃしてるプログラムは動くかどうかもわからない。
デバックもしにくい。
そして、コメントを書け。
自分だけでなく他の人が読んでも解るようにな。
コメントを書けば自分でも理解しながら書ける。

健闘を祈る。
811デフォルトの名無しさん:2005/11/25(金) 23:40:07
自分じゃできないことを他人に薦める人が多いな
俺は除いて
812デフォルトの名無しさん:2005/11/25(金) 23:41:18
嘘つけ
813半人前:2005/11/25(金) 23:51:17
うぃ、まだ私は読みきれない。
814デフォルトの名無しさん:2005/11/26(土) 06:38:19
とある5次方程式の解の一つを求めたいのですが、接線がべたーっとx軸に水平に
なってしまうため、ニュートン法などが使えません。ちなみに関数の形は
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を求めるために、何か良い方法は無いでしょうか。
815デフォルトの名無しさん:2005/11/26(土) 08:56:51
>>814
無い
816デフォルトの名無しさん:2005/11/26(土) 09:35:58
>>814
y2 = y*2.0e-10/3.0 なる y2 の解を求めればええんじゃないの?
817デフォルトの名無しさん:2005/11/26(土) 10:18:00
>>814
ニュートン法が使えないって事はないが、二分法で。
#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;
}
818814:2005/11/26(土) 11:26:34
>>816
すみません、どうしてそれを求めればよいのかが分かりません・・・。
教えていただけないでしょうか。

>>817
ありがとうございます、完璧に出ました!
自分でプログラムした時にはそこまで小さなepsにするとエラーが出てしまったのですが、
このプログラムだと華麗に動きますね。感動しました、ありがとうございます。
819814:2005/11/26(土) 11:59:29
>>817
プログラムを参考にさせていただいた結果、ニュートン法でも結果を得ることができました。
本当にありがとうございました。勉強になりました。
820816:2005/11/26(土) 13:53:26
>>818
すでに解決済みのようだが意図としては右辺全項に 0.0000000000667 が掛かってるんで
これを消去した式で解を求めれば速度と精度と両方向上するよねってことですた。
y と y2 が逆だな。ちゃんと確認しろよ >>俺
821814:2005/11/26(土) 14:52:07
>>820
仰る通りですね(^^;
そんな単純なことに今まで気が付きませんでした・・・。
的確なご指摘、ありがとうございます。
822デフォルトの名無しさん:2005/11/26(土) 16:50:40
>三つの整数35,88,154を変数a,b,cにそれぞれ代入して、
>a+b+cおよびa-b-cを計算するプログラムを作りなさい。

出力結果は
a+b+c=277
a-b-c=-207
にしたいのですが、どうすればいいでしょうか?
823デフォルトの名無しさん:2005/11/26(土) 17:02:09
a = 35;
b = 88;
c = 154;

printf("a+b+c=%d\n", a+b+c);
printf("a-b-c=%d\n", a-b-c);
824822:2005/11/26(土) 17:07:04
>>823
これでいいのでしょうか?

#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;
}
825デフォルトの名無しさん:2005/11/26(土) 17:12:58
>>824
いいえ
826822:2005/11/26(土) 17:15:15
>>825
なぜですか?
827デフォルトの名無しさん:2005/11/26(土) 17:55:36
1.a+b+cおよびa-b-cという変数は宣言できない
2.waとsaと言う変数が宣言されていないし値の代入が行われていない

828822:2005/11/26(土) 18:10:19
>>827
2.は分りましたが、1.はどう宣言すれば良いのでしょうか?
829デフォルトの名無しさん:2005/11/26(土) 18:12:33
830デフォルトの名無しさん:2005/11/26(土) 18:20:50
すみません、質問させてください。
sscanfとfgetsを使って、例えば「I am student.」
と入力したとき、
I   → word[0]に1
am   → word[1]に2
student→ word[2]に6
と配列に文字数を格納するにはどう
書けばいいのでしょうか・・。
831822: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;
}
832830:2005/11/26(土) 18:38:34
すみません、sscanf内では%sの使用は一度で済ませたいのです。
%s%s%s・・・というのはやはり美しくないので
833デフォルトの名無しさん:2005/11/26(土) 18:39:30
>>830
#include<string.h>
char s[64];
printf("%s",strlen(fgets(s,64,stdin));
834830:2005/11/26(土) 18:54:14
>>833様のをもとに書いてみたのですが
#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;
}
うまくいきません、配列の使い方がおかしいのでしょうか?
835デフォルトの名無しさん:2005/11/26(土) 18:57:29
#include <stdio.h>
#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;
}
836830:2005/11/26(土) 19:19:53
>>835
strokの使い方は大体わかりました。
whileで回せば区切りは出来そうです。
sizeof()という関数は別に設定する必要は
ありますか?そのままだとデバックエラーに
なってしまいますので・・・。
837830:2005/11/26(土) 19:21:05
sscanfでは出来ないのでしょうか?
838デフォルトの名無しさん:2005/11/26(土) 19:26:46
>>830
例外処理は考慮してない。

#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;
}
839830:2005/11/26(土) 19:46:51
>>838様。
ありがとうございました!
最後に一つだけ教えてください。scanf中の
sは配列、offsetはint型関数でsscanfの第一引数は
配列型の指定が必要ですが、これは配列のアドレス
に+offsetしているのですか?
このsscanfは戻り値を返す判定のみでの使用ですよね?
840デフォルトの名無しさん:2005/11/26(土) 20:05:04
荒れる前に、去れ。
お前に必要なのは、とりあえず入門書だ。
841デフォルトの名無しさん:2005/11/27(日) 01:37:34
>>836
sizeofは関数ではなく演算子だ。
842デフォルトの名無しさん:2005/11/27(日) 06:43:00
昨日からウェブを回りながら独学でC言語のことを勉強し始めたのですが、
初心者におすすめのC言語入門書というのはないでしょうか?
まだfor if辺りまでしか読んでません
843デフォルトの名無しさん:2005/11/27(日) 08:27:26
ローカルルールも読めない人にすすめられる本は知らんよ
844デフォルトの名無しさん:2005/11/27(日) 16:23:34
ビューア使ってるんでローカルとか読んでなかった
明日帰りによさそうなの適当に買ってみる
845デフォルトの名無しさん:2005/11/27(日) 17:04:27
どうぞご自由に無駄金使って自己満足してください。
846デフォルトの名無しさん:2005/11/27(日) 17:22:56
何で無駄に煽るかな
847デフォルトの名無しさん:2005/11/27(日) 22:02:32
心が狭いから
848デフォルトの名無しさん:2005/11/28(月) 00:14:55
やさしいC
Cの絵本

プログラミング言語C ANSI規格準拠 第2版(読めるならな)
849デフォルトの名無しさん:2005/11/28(月) 15:38:11
Visual Studio theSpoke Premium ver.2003って今でも買い?
2003って古い気がしてならないんだけど
850デフォルトの名無しさん:2005/11/28(月) 15:42:27
>>849
2005Proがタダでもらえます(要登録
851デフォルトの名無しさん:2005/11/28(月) 18:10:30
なんでこのスレで聞くんだろうな
852デフォルトの名無しさん:2005/11/28(月) 18:13:22
作成したプログラムの計算量を比較したいのですが、
ループの回数がマチマチで単純にオーダーを取ることでは比較しづらい
という現状です。

コンパイラのコマンドやソフトウェアで計算量を測れませんか?
853デフォルトの名無しさん:2005/11/28(月) 18:17:31
>>852
測れる環境があるデバッガはありますよ。
854852:2005/11/28(月) 18:34:13
>>853
すみませんが、そのデバッガは何処で手に入るか、
もしくは名称を教えていただけませんか?
855デフォルトの名無しさん:2005/11/28(月) 18:46:15
>>854
あなたの環境もわからないのに教えても無意味ですよ。
856デフォルトの名無しさん:2005/11/28(月) 18:58:40
普通はプロファイラを使うと思うんだが?
デバッガでそんな事出来るのあるのか?
857デフォルトの名無しさん:2005/11/28(月) 19:06:00
>>856
ありますが何か?
858852:2005/11/28(月) 20:28:10
お二方共コメントありがとうございます。
無知で申し訳ありません。
どちらにせよcygwinにプラグインする形をとることはできるのでしょうか?
859デフォルトの名無しさん:2005/11/28(月) 21:39:05
どなたかエロイ人、お足得手下さい。
中一のがきんちょがゲームばかりやって、テストで2点とか
超パープリンな点数をとってきます。
で、ピアノが弾けるので芸無関係の業界へ進ませようと思ってます。
そこでCなんですが、VISUAL以外のただのCって売っているんで
しょうか?何処で買えば?それともVisualCが主流なんですか?
また、厨房向けの入門書もいいのがあったらご教授下さいませ。
860デフォルトの名無しさん:2005/11/28(月) 21:48:15
>> 858
「cygwin gcc gprof」でぐぐれ

>>859
質問するときは奇を衒わず真っ当な文章を書こうな。
とりあえず ピアノが弾ける→ゲーム関係 ってのが意味不明。
861デフォルトの名無しさん:2005/11/28(月) 21:49:24
>>859
ピアノが弾けるのならピアニストになれよ。
862デフォルトの名無しさん:2005/11/28(月) 22:02:06
>>859 ピアノマンになれwwwwww
863伝説新人タクシ:2005/11/28(月) 22:04:51
>>859
自己紹介"己"。
低脳人間を設定することで別の人間に仕立て上げる。
最低ではないが最悪だ。
言の端、普く全ての尽くが裏目に出る。
864859:2005/11/28(月) 22:07:42
>>860
>とりあえず ピアノが弾ける→ゲーム関係 ってのが意味不明。
ゲーム音楽の作曲アレンジとかをやればと思って。
>>861 >>862
いじめちゃいやん。
あふんばかん。
狂言はダメですらい。
865デフォルトの名無しさん:2005/11/28(月) 22:09:19
・・・ゴクリ
866伝説新人タクシ:2005/11/28(月) 22:10:50
もちろん普通にデジタル作曲・編集はできるだろ?
867デフォルトの名無しさん:2005/11/28(月) 22:13:47
>>864
いや、だからゲーム音楽と絞っているか理解できない。なんの作曲家でも演奏家でもいいだろうに。
それはともかく音楽とプログラミング言語Cにはなんの関係もない。
料理人とレストラン経営の違いと同じぐらいの違いがある。
868デフォルトの名無しさん:2005/11/28(月) 22:32:50
while Q≠0 do
はQが0でないとき繰り返すんですよね?
では、Q≠0から一度Q=0になり、再びQ≠0になったとき
終了させるにはどうすればいいですか?
869デフォルトの名無しさん:2005/11/28(月) 22:38:30
>>868
while (Q != 0) {
if (Q == 0) {
while (Q == 0) {
hoge;
}
break;
}
}

これでどうよ
ってかwhile ~ doってpascalの構文じゃね?
870デフォルトの名無しさん:2005/11/28(月) 23:00:22
>>859
876の言う通りゲーム業界に作曲系で入りたいのならCの知識は不要。
が、音屋さんの仕事って最初はループ再生用のカットとかノイズ低減とかで、
作曲アレンジなんておいしい仕事がくることは下手すると一生ないぞ。

音大くずれのゲーオタ連中と張り合っていける自信があるならどうぞいらっしゃいな。
871870:2005/11/28(月) 23:39:34
*おおっと*
未来の876さん失礼いたしました。867さんの間違いでしゅ。
872デフォルトの名無しさん: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;
}
873デフォルトの名無しさん:2005/11/29(火) 00:09:25
for(i=n-1;i>=1;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;
}

でした;
874デフォルトの名無しさん:2005/11/29(火) 01:10:49
>>869
ありがとうございます。明日先生に見せてきます!
hogeって何ですか?すいません。これってpascalなんですか?!
875デフォルトの名無しさん:2005/11/29(火) 05:18:49
はてなダイアリーより hoge

日本の情報処理技術者が替え玉記号のように利用することが多い文字列。情報処理の技術ではメタ構文変数(Metasyntactic variable)とも呼ばれる。
つまり「hoge」と書いてあったら「必要なほにゃらかに置き換えて使ってください」というちょめちょめになる。


876デフォルトの名無しさん:2005/11/29(火) 10:08:52
>>873
sentinel == 0 じゃねーの。
877デフォルトの名無しさん:2005/11/29(火) 15:23:42
        ∧_∧
       (´・∀・`)  ハーイ
       ( ⊃┳⊃ 
       ..(_)/⌒ヽ
   ⊂二二二( ^ω^)二⊃
        |    /       ブーン
         ( ヽノ
         ノ>ノ 
     三  レレ
878デフォルトの名無しさん:2005/11/29(火) 18:47:02
アンケートみたいに質問の答えをまた質問にする方法教えてください!
激初心者ですみません
879デフォルトの名無しさん:2005/11/29(火) 18:52:47
>>878
質問の答えをまた質問にすればOK。
880デフォルトの名無しさん:2005/11/29(火) 21:20:09
>>873
そういうのはsentinelとは言わないと思うのだが、その問題出したのはどこのどいつだ。
881デフォルトの名無しさん:2005/11/30(水) 00:05:08
linuxでプログラミングを勉強しようと思ってるのですが、
CとC++どちらにすれば良いか迷っております。

どなたかアドバイス下さい。
882デフォルトの名無しさん:2005/11/30(水) 00:17:39
>>881
藻前にはどちらも無理
883デフォルトの名無しさん:2005/11/30(水) 13:31:08
質問します。
ブルートフォースクラックとかプログラムはどういう仕組みで動いてるのか勉強したくて質問しました。
たとえば
パスワードが34ieの四文字英数字だったとします。

1から順に4文字を生成してるのはどういう仕組みなんでしょうか?
ただ単にそのまま四個のfor文でくるくる回してるんでしょうか?
具体例とかあったらうれしかです。
884デフォルトの名無しさん:2005/11/30(水) 13:35:52
>>883
つ[John the ripper]
885デフォルトの名無しさん:2005/11/30(水) 13:38:54
スタックのLIFOとFILOってのは同じですか?
886デフォルトの名無しさん:2005/11/30(水) 13:41:43
スタックですらないのかよ!
887デフォルトの名無しさん:2005/11/30(水) 13:42:48
>>886
それはFIFA
888デフォルトの名無しさん:2005/11/30(水) 14:28:56
>>887
World Cup?
889デフォルトの名無しさん:2005/11/30(水) 15:35:53
オブジェクト指向って何?
クラスって何?
メソッドって何?

↑調べるとなんかループするし・・・orz
890デフォルトの名無しさん:2005/11/30(水) 16:26:12
>>889
C言語のスレよりふさわしい所で聞けやボケ
891デフォルトの名無しさん:2005/11/30(水) 18:40:45
出力結果をテキストファイルに保存する方法を教えてください。
よろしくお願いします。
892デフォルトの名無しさん:2005/11/30(水) 19:58:29
>>891
その出力が標準出力ならばリダイレクトでできる。
その出力がGUI上ならばコピペでできるかもしれない。
いずれにしろ、環境がわからなくては詳しくはかけない。

尚、ファイルに出力したいならばfopen()、fprintf()、fclose()などを調べよ。
893デフォルトの名無しさん:2005/11/30(水) 19:59:04
>>891
リダイレクト
894デフォルトの名無しさん:2005/11/30(水) 20:39:28
>>892
>>893
解答ありがとうございます。
コマンドプロンプトに標準出力しています。
リダイレクトで調べてみます。
895デフォルトの名無しさん:2005/11/30(水) 21:02:17
キーボードから文字列を受け取り、改行のみが入力された場合に、
ループを抜けるようにプログラムしたいのですがうまくいきません。

buffer[20];
while(buffer[0]!='\n) {
scanf("%s",buffer);
}
このようなプログラムを作ってみましたが、
これではscanfが改行だけの入力だけでは、受け付けてくれないですし、
getche()とforループの組み合わせでもよい方法が浮かびません。

何かよい方法があれば教えてください。よろしくお願いします。




896デフォルトの名無しさん:2005/11/30(水) 21:07:40
>>894
リダイレクトは大抵のOSで "> ファイル名"と書く。
つまり、"プログラム名 > ファイル名"と書けばいい。
OSによっては'%'だったり'|'だったりする希ガス。
897デフォルトの名無しさん:2005/11/30(水) 21:08:33
>>895
fgets()で入力し、sscanf()で変換するのが常套手段。
#あ、その例ではsscanf()するまでもないや。
898デフォルトの名無しさん:2005/11/30(水) 21:29:02
>>896
|はパイプ
899デフォルトの名無しさん:2005/11/30(水) 21:32:04
>>895
返答ありがとうございます。

恐縮なんですが、fgets()で入力し、sscanf()で変換するというのがいまいちわかりません^^;
fgets()は、ファイルから1行呼び出してくる関数だったと思うんですが、
詳しく教えてもらえないでしょうか・・・。
900デフォルトの名無しさん:2005/11/30(水) 21:39:22
すみません。
>>897でした^^;
901デフォルトの名無しさん:2005/11/30(水) 21:41:11
>>898
だからそういうOSがあるんだってばさ。

>>899
fgets()でもstdinを指定すれば標準入力から読める。
902デフォルトの名無しさん:2005/11/30(水) 22:19:22
>>899while(scanf("%s",buf)!=1);で十分だろ
903デフォルトの名無しさん:2005/11/30(水) 22:31:47
>>896
出力結果を保存することができました。
ありがとうございました。
904デフォルトの名無しさん:2005/11/30(水) 23:40:58
883ですが
ジョンザリッパーがどんな感じか聞いているんです。
905デフォルトの名無しさん:2005/11/30(水) 23:50:14
>>904
ソースを読め
906デフォルトの名無しさん:2005/12/01(木) 00:08:13
バックスラッシュの出し方、教えてください。
907デフォルトの名無しさん:2005/12/01(木) 00:09:31
\\
908デフォルトの名無しさん:2005/12/01(木) 00:17:06
正の整数を入力し、その個数だけ*を連続して横に並べて出力するプログラムを作成せよ。
ただしwhile文を用いること。
というプログラムはどうやって作ればいいのでしょうか。。。
909!omikuji:2005/12/01(木) 00:17:07
おみくじなら
910デフォルトの名無しさん:2005/12/01(木) 00:21:54
>>907
ダメでしたorz
911デフォルトの名無しさん:2005/12/01(木) 00:24:28
>>910
フォントを欧州のやつに変えてみれ。
日本語の\はバックスラッシュと同じ文字コード。
912デフォルトの名無しさん:2005/12/01(木) 00:26:06
>>908
入力された整数の分だけ、While回せ
ループの中でprintf("*");
913デフォルトの名無しさん:2005/12/01(木) 00:35:15
srand()で初期乱数を時間から持っていた数字で決めて、
rand()で初期乱数から乱数を引っ張る っていう結構一般的な
乱数発生関数を作ったんですが、もっと 散り散りになる乱数の作り方って
ないでしょうか?
914デフォルトの名無しさん:2005/12/01(木) 00:37:20
>>913
つ[Mersenne Twister]
915デフォルトの名無しさん:2005/12/01(木) 00:37:49
>>905
初心者スレじゃないんかよ!!
ったくわからないならわからんって言えよww
916デフォルトの名無しさん:2005/12/01(木) 00:41:22
>>912
ありがとうございます!!なんとなくできました!!
917デフォルトの名無しさん:2005/12/01(木) 00:44:42
>>883 >>904 >>915
(ここはジョンザリッパーの初心者スレじゃないですよ。
ブルートのアルゴリズム解析スレでもないですよ。
質問者の態度っていうものもあると思いますよ。
回答者が出てくれるまで、気長に待ったほうが得策だと思いますよ。
それが待てないのならば、)ソースを読め
918デフォルトの名無しさん:2005/12/01(木) 00:50:13
>>914
おぉ なかなか面白そうな。
ヒントありがとうございます。
919デフォルトの名無しさん:2005/12/01(木) 02:11:44
なんとか空白で文字幅を調節して
掲示板に書き込む時に見栄えを良くしたいのですが
そのようなアルゴリズム(プログラム)はありますか?

左側の文字列は共に9文字で単純に6文字の空白を
入れただけでは次のようになってしまいます・・・
【例】
あっいaIU++幅      ここに書く
tkahuanたl      ここに書く
920デフォルトの名無しさん:2005/12/01(木) 02:17:18
>>919
フォントによって違うだろ
921デフォルトの名無しさん:2005/12/01(木) 02:22:43
>>919
固定長フォントで全角のみを使うwww

まあ実際、文字の位置あわせというのは簡単なようで、結構難しい。
922919:2005/12/01(木) 03:03:50
>>920
いや例えばこの掲示板に書き込むだけなら同じフォントですよね?

>>921
そうですか・・・
左側の列は予め決まった単語ではないので
どうしても計算してだす必要があるんです・・・
923デフォルトの名無しさん:2005/12/01(木) 03:33:34
>>922
プログラム言語はなんですか?
924919:2005/12/01(木) 03:59:30
>>923
C言語です
925デフォルトの名無しさん:2005/12/01(木) 04:04:31
AA関連のサイトにでも行って、定番フォントの幅を調べて文字ごとの画素数のテーブルを作り、
それを使って計算すればやってできないことはない。
が、かなり面倒だとは思う。
926919:2005/12/01(木) 04:23:18
>>925
やっぱりそこまでしないとできないものですか・・・
ヤフーで検索してもそれらしきものがでてこないし・・・

あ 1
あ11

↑今気づいたけど、半角スペースと半角数字の1の幅が違うんですよね・・・
正直これには参った・・・
やっぱり完璧にするのは無理かなぁ
927デフォルトの名無しさん:2005/12/01(木) 04:33:18
>>926
プロポーショナルフォントは、すべての文字の文字幅は異なると思ったほうがよい。
だから計算できたとしても、ぴったりではなくて近似なんだよね。

WinAPIのGetCharacterPlacementやGetTextExtentPoint32という関数で文字列の幅の計算が
できるようです。HDCを渡さなくてはいけないんですけど。
928デフォルトの名無しさん:2005/12/01(木) 05:51:57
http://www.geocities.jp/file_file_file_aaa/guide/glinedot.html
漢字全て16pxなので3〜15pxのリストを保持するだけでいい。
それはともかく「半角SPは行頭に来れず、連続することもできない」という条件で整形するアルゴリズムを考えるのは楽しそうだ
929デフォルトの名無しさん:2005/12/01(木) 08:19:35
しかも、 があったりね。
930デフォルトの名無しさん:2005/12/01(木) 10:23:41
>>922
フォントはブラウザの設定で変し、
掲示板で書き込みできるのは文字情報のみで、
表示されるフォントの情報など存在しない。

そんなに位置合わせをしたいなら、
タグ入力可能な掲示板でtableタグで合わせろ。
931デフォルトの名無しさん:2005/12/01(木) 10:55:44
夢がねぇ香具師だなぁ。
つーか、AAを否定されてもねw
932デフォルトの名無しさん:2005/12/01(木) 11:25:54
Z1=2.5+3.2i
Z2=1.3+0.4i

この和と積を求めて、結果を打ち出すプログラムはどうなりますか?
自分でやってみたんですが、うまくいきません。
誰かわかる方教えてください。
933デフォルトの名無しさん:2005/12/01(木) 11:45:36
折角回答しようとも思ったがマルチにつき放置。
http://pc8.2ch.net/test/read.cgi/tech/1132102992/982
934デフォルトの名無しさん:2005/12/01(木) 15:19:43
ttp://hp.vector.co.jp/authors/VA018359/

このサイトの、DISWINでAPIリストを作るという項目をやってるんですが
このサイトのOSは98で自分はXPなのでディレクトリの指定が分かりませんorz

色々試してるんですがMKLISTをどこに指定していいのでしょうか。。

スレ違いだったらごめんなさい
935デフォルトの名無しさん:2005/12/01(木) 15:39:50
936デフォルトの名無しさん:2005/12/01(木) 17:06:15
mallocが理解できないのでお聞きします。

char *z;
int a;

z = (char *)malloc(a * 2 + 1);

の様に使うみたいですが
(char *)の部分がわかりません。(a * 2 + 1)の部分はa×2+1バイト用意するってことですか?
937デフォルトの名無しさん:2005/12/01(木) 17:16:36
>>936
mallocはvoid*型の値を返すから、char*型にキャストしてからzに入れないと
コンパイラに怒られる。
そんでもって(a * 2 + 1)バイト確保してる
938デフォルトの名無しさん:2005/12/01(木) 17:18:14
>>937
イマイチわかりませんが、取りあえず書いておけということですね
939デフォルトの名無しさん:2005/12/01(木) 17:19:05
>>936
(型名)式
は式を指定した型に変換します。
この場合はchar*型(charへのポインタ型)に変換しているわけですね。

mallocはvoid*型を返し、void*型は代入時に自動的に(左辺のポインタ型に)型変換されるのでこのようなキャストは必要ありません。

可読性や安全性を考えると、むしろやめておいた方がいいでしょう

>>937の2行目と3行目はC++の仕様です
940デフォルトの名無しさん:2005/12/01(木) 17:34:03
>>934
その際とのどこにDISWINとやらがあるのか教えてくれ。
941934:2005/12/01(木) 17:50:18
ttp://hp.vector.co.jp/authors/VA018359/

ごめんなさいページのURL貼ったんですがTOPが表示されるっぽいですね

お手数ですが
下のタブの解析・考察(Hacking)→キーディスクチェック解析
→上から10行目の改造講座→初級05の「逆アンセブラを使ってみる2」です

めちゃくちゃ面倒くさいですね・・・すいませんorz

そこにあるAPIリストの作成なんですがXPではどこを指定したらいいのやら・・・
942デフォルトの名無しさん:2005/12/01(木) 18:09:57
>>941
2kもXPも同じNT系。
だけどXPのデフォルトのインストールフォルダはC:\WINDOWS。
ということでC:\WINDOWS\SYSTEM32
943デフォルトの名無しさん: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 が開けません
――――――――――――――――――――――
と出てきます。
944デフォルトの名無しさん:2005/12/01(木) 18:22:47
>>941
スレ違いになるけど、そういうフレームを使ったページは目的の場所で右クリックメニューから
プロパティを出すと中身のアドレスが得られるよ。
で、XPは知らんけどWin2Kと同じなんで内科医?
まぁ、どうなっても私ゃ知らんが。
945デフォルトの名無しさん:2005/12/01(木) 18:25:32
>>943
BCCスレで聞くといいと思うよ。
946934:2005/12/01(木) 18:47:01
>>941
ありがとうございます!出来ました!

>>944
そんな方法あったんですね。次からそうします!

あとはdd拍子にいけるはずです。わざわざありがとうございましたm(_ _)m
947デフォルトの名無しさん:2005/12/01(木) 18:47:37
魑魅魍魎
948:2005/12/01(木) 18:48:49
× >>941
>>942

興奮してアンカーミスりました。連投すいません。
949デフォルトの名無しさん:2005/12/01(木) 20:04:23
//演習3.6
#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です。
950デフォルトの名無しさん:2005/12/01(木) 20:25:36
//演習3.6
#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);
}
見にくくてすみません。
951デフォルトの名無しさん:2005/12/01(木) 20:27:51
よく見てないけど
>scanf("%d.%d.%d",&yy,&mm,&yy);
yy がふたつ。
952デフォルトの名無しさん:2005/12/01(木) 20:34:05
ああああああぁぁぁぁぁぁ.....orz
やってしまった・・・見落とし・・。orz
次からは注意します。
953デフォルトの名無しさん:2005/12/02(金) 00:35:30
で、そのプログラムは結局なにがしたいのさ
年数を入力する必要はないし、仮に元日からの日数を求めるんであれば、
1月31日を指定したら62日と帰ってきそうなんだが。
954デフォルトの名無しさん:2005/12/02(金) 09:14:26
//演習3.6
#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);
}
完成しました。
入力した年月日を入力し、元日からの日数を求めるプログラムです。
年を入力する必要があったのは閏年の判定をする為です。
955デフォルトの名無しさん:2005/12/02(金) 09:24:40
>>954
100年判定入れるなら400年判定入れないと2000年がおかしくなる。
956デフォルトの名無しさん:2005/12/02(金) 09:27:07
細かいけどこうね
if(yy%400==0 || (yy%4==0 && yy%100!=0))
957956:2005/12/02(金) 09:27:52
かぶった・・・
958デフォルトの名無しさん:2005/12/02(金) 09:36:36
if(mm > 0 && mm < 13){
if(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;
}
}
お早いレスありがとうございます。判定の位置もおかしかったので修正
しました。これからも精進します。
959デフォルトの名無しさん:2005/12/02(金) 10:28:54
>>955
過去は振り返らないのさ。
960デフォルトの名無しさん:2005/12/02(金) 22:29:32
>>959
長い未来を見据えず、mktime()で算出するのはいかが?(w
961デフォルトの名無しさん:2005/12/03(土) 10:44:15
FreeBSDで下の式のグラフを書いて表示させたい。どうすりゃいいんだ
f(x) = x*x ( x=-4, -3, ..., 0, 1, ..., 4)
962デフォルトの名無しさん:2005/12/03(土) 10:50:29
gnuplot
963デフォルトの名無しさん:2005/12/03(土) 11:07:20
ありがとう
964国士:2005/12/03(土) 14:18:55
僕もどしろうとなんですけど代入演算子ってなにかわかりますか?
965デフォルトの名無しさん:2005/12/03(土) 14:22:25
もちろんだ
966デフォルトの名無しさん:2005/12/03(土) 14:42:42
char a = '+'
とかやったときのaが代入演算子。ようするに演算子を代入するもののことだ
967デフォルトの名無しさん:2005/12/03(土) 14:51:28
>>966
ワロタ
968デフォルトの名無しさん:2005/12/03(土) 16:20:50
任意の関数f(x)の x=n における微分係数を求めるにはどのような方法がありますか

f(x),g(x),h(x)とあれば、diff_fx(float x),diff_gx( float x),diff_hx( float x)みたいに3つ作るくらいしか考えられませんでした
diff_fx( float x) の内容は、手計算でf(x)の導関数を求めて、それを書き込んでというどうしようもない状態です(ノд`)
969デフォルトの名無しさん:2005/12/03(土) 16:30:53
>>968
あらかじめ関数が決まっているなら精度的にはそれが一番いい方法。
970デフォルトの名無しさん:2005/12/03(土) 16:39:25
>>968
関数決まってないなら
f'(c) = lim[h→0]{(f(h+c) - f(c))/h}
を使って、h=0.000000001とでもしてやるしかないんじゃまいか?
971デフォルトの名無しさん:2005/12/03(土) 16:48:51
>>969
確かにこれでも問題なく動くのですが、汎用性が全くないなぁと思いまして
関数変える度に、導関数も求め直すのも結構手間ですし

>>970
定義に従って微分していくということですか
試してみます

ありがとうございました
972デフォルトの名無しさん:2005/12/03(土) 16:51:38
>>970
それは小さすぎ。普通の多項式でもひどい誤差になる。
中心差分でも10の-5乗くらいが限度かと。
973デフォルトの名無しさん:2005/12/03(土) 16:54:10
近似式ってもんを知らない馬鹿しかいないんだな
974デフォルトの名無しさん:2005/12/03(土) 16:54:46
>>972
hは適当に書いてみた。スマンカッタ
975デフォルトの名無しさん:2005/12/03(土) 16:57:17
>>973
>>1を読んで出直したら?
976デフォルトの名無しさん:2005/12/03(土) 17:00:19
これがCの質問だと思ってる奴の脳味噌じゃその程度か。
977デフォルトの名無しさん:2005/12/04(日) 15:45:41
キーボードから「c」を入力した時に「OK!」、それ以外の時には「NG!」と出力するプログラムはどう書けばいいですか?
978デフォルトの名無しさん:2005/12/04(日) 16:02:01
if( キーボードから入力された文字 == 'c' ) puts("OK!");
else puts("NG!");
979977:2005/12/04(日) 16:17:46
else if文でお願いしますorz

自分ではこう書きましたがダメでした。
#include<stdio.h>
int main(void)
{
  int x;
  scanf("%c",&x);
  if(x=='c'){
   printf("OK!\n");
  }
  else{
   printf("NG!\n");
  }
  return 0;
}
980デフォルトの名無しさん:2005/12/04(日) 16:38:07
>>979
intで宣言して%cで受けるのはおかしいだろがッ
とりあえずchar xに汁
981977:2005/12/04(日) 16:58:59
>>980
出来ました。
でも、「cc」でも「OK!」と出てしまいます。
982デフォルトの名無しさん:2005/12/04(日) 17:25:52
>>981
・・・・scanfが何してるか考えてるか?
983977:2005/12/04(日) 17:30:52
>>982
キーボードから数値を取り込む関数?
すみません。激初心者ですorz
984デフォルトの名無しさん:2005/12/04(日) 17:33:00
985977:2005/12/04(日) 17:42:37
char x;
scanf("%c",&x);
if(a=='c')

この辺が間違ってる様な希ガス
986977:2005/12/04(日) 17:47:33
char x;
scanf("%c",&x);
if(x=='c')

こうか
987デフォルトの名無しさん:2005/12/04(日) 17:48:43
988デフォルトの名無しさん:2005/12/04(日) 17:52:24
char型は文字一文字が入るサイズのデータ型です。所謂1バイト。これは全処理系共通です。
scanfの%cは文字一文字を受け取ることを示します。
つまり

char c;
scanf("%c",&c);

は標準入力からcに一文字入れるということです。
989977:2005/12/04(日) 17:55:26
#include<stdio.h>
int main(void)
{
  char x;
  scanf("%c",&x);
  if(x=='c'){
   printf("OK!\n");
  }
  else{
   printf("NG!\n");
  }
  return 0;
}

ccと入力してもON!にするにはどうしたら?
990977:2005/12/04(日) 17:56:16
↑NG!ですorz
991デフォルトの名無しさん:2005/12/04(日) 18:09:51
>>990
fgetsぐらい使え」
992デフォルトの名無しさん:2005/12/04(日) 18:33:30
#include <stdio.h>
#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;
}

冗長だと思ったら改行文字除去削って比較文字列に改行文字加えれ
993977:2005/12/04(日) 18:40:46
>>991-992
すいません。そこまで習っていません。
習ったのは
printf関数
scanf関数
if文
else if文
for文
等です。
これらで>>977は出来るはずなんだけどなぁ
994デフォルトの名無しさん:2005/12/04(日) 18:48:39
>>993
配列は習った?
習っていないなら2文字以上の入力は考えなくてもいいはずだ
995977:2005/12/04(日) 19:17:21
>>994
習っていません。
996デフォルトの名無しさん:2005/12/04(日) 19:18:19
>>987

でも,そしたら993のような香具師はスルーされるかもな
初心者は2chじゃなくて,K&R読んで勉強汁ってことか
997デフォルトの名無しさん:2005/12/04(日) 19:19:05
>>995は薬師ね
998デフォルトの名無しさん:2005/12/04(日) 19:20:34
>>997
薬師?
999デフォルトの名無しさん:2005/12/04(日) 19:25:37
>>993
これでお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:04
次スレ

C言語なら俺に聞け! Part 117
http://pc8.2ch.net/test/read.cgi/tech/1131282679/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。