[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/24 02:11 / Filesize : 245 KB / Number-of Response : 928
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 63



1 名前:デフォルトの名無しさん [2010/04/10(土) 23:30:23 BE:454421186-S★(520172)]
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 62
pc12.2ch.net/test/read.cgi/tech/1269517734/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 135代目
pc12.2ch.net/test/read.cgi/tech/1269438098/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

734 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 09:40:37 ]
>732

「厳格なコーディング規約」ってのは何?

いずれにしても
・ポインタに対する単項の*演算子禁止
・ポインタ演算も禁止
っていうコーディング規約は賛同できない。

>これは文字通り、*(p+i)と書かずにp[i]と書けということ。
何が文字通りなのかわからんが、p[0]ではなく
*pと書くべきケースは、少なからずありますよ。

>ポインタ演算も禁止される場合がある。
揚げ足とるようですまないが、文法を厳格に解釈すれば、
p[i]は*(p + i)のシンタックスシュガーでしか無いので、これも禁止されるように
読めてしまう。こうなるとまともなコーディングは無理。

「厳格なコーディング規約」というからには、しょうもないつっこみを
受けないような、「厳格な」表現を使ってください。

735 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 09:42:36 ]
>>734
知識不足は恥じゃないけどねぇ。
今出掛けるんで、あとで資料を提示するよ。

736 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 10:02:06 ]
メモリ領域を確保したら動くようになりました。
ご指摘のとおり、数値文字のみを文字列型で入力させて
その文字列をメインで受け取る入力用関数を作れという演習目的の課題でした。
質問の仕方が悪くて混乱させてしまい、すみません。

ご指摘ありがとうございました。


737 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 10:12:45 ]
宿題は宿題スレへ

738 名前:デフォルトの名無しさん [2010/05/08(土) 12:43:57 ]
読み込むテキストファイルには*.cと書いてあるのですが、
(仮引数で拾った文字列).cに置換する方法をご教授願えないでしょうか。
以下がソースです。
色々突っ込みどころがあると思いますが宜しくお願いします

#define LEN_MAX 256
int FileRewrite(char *proj_name)
{
FILE *fp;
char *search_p;
char replace_p;
char line_buff[LEN_MAX];
char tar_buff[LEN_MAX];
char rep_buff[LEN_MAX];
char source_name[LEN_MAX];

sprintf(source_name, "./%s/Source/%s.c", proj_name, proj_name);
if ((fp = fopen(source_name, "r+")) == NULL){
fprintf(stderr, "file open error...¥nexit status(-100)¥n");
exit(EXIT_FAILURE);
}
strcpy(tar_buff, "*.c");
while (fgets(line_buff, LEN_MAX, fp) != NULL) {
search_p = strstr(line_buff, tar_buff);
if (search_p != NULL) {
sprintf(rep_buff, "// %s.c¥n", proj_name);
rtn = fputs(rep_buff, search_p);
}
}
fclose(fp);
return (0);
}

739 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 12:57:08 ]
>>738
ソースファイル内の *.c という文字列を全て置換するの?
ソースファイルのコメント中の *.c という文字列を全て置換するの?

740 名前:デフォルトの名無しさん [2010/05/08(土) 13:02:17 ]
>>739
ソースファイルのコメント中の *.c という文字列です。
紛らわしくて申し訳ないです。

*.cという文字列は読み込みファイルの中に1つしかないので全てでもアリだと思います。

741 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:16:52 ]
>>734
ほい、一例を。
ttp://sec.ipa.go.jp/reports/20050523/coding_guide.pdf
こいつの14ページ目辺りにポインタ演算について書かれているよ。
但しこいつは、逆参照自体はNGとはしていないけれど。
まぁ少なくとも、糖衣構文を理由に双方を適合とはしないということは判ると思う。

742 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:29:10 ]
>>740
Cでやるよりsedやawkでやった方が楽な気がするけど。
sed -e 's/\*\.c/proj.c/' source > destination
該当ファイルを検索する辺りから含めてシェルスクリプトで書けば管理も楽だろうし。

Cでやりたいなら、以下に注意。
--
・読み込みバッファと書き出しバッファの共有は無茶
仮令"r+"でオープンしても、読み込みと書き出しは混在できない。
1行読んだら読む前の場所まで巻き戻してから書けば書けなくはないが、
行の長さが長くなるので次の行(の先頭)を潰してしまう。
あれこれ気を遣うくらいなら、一旦別のファイルに書いた方がいい。
・「*.c」が含まれる行は本当にそのコメント形式だけなのか
例えば「// *.c (ここに重要なコメント)」のようになっていたら、
そのコメントを潰してしまうことになる。
そこに気を遣うくらいなら、「*.c」を置換するに留めるべき。
尚、置換処理自体はsprintf()で%*.*sを駆使すれば数行で書ける。



743 名前:デフォルトの名無しさん [2010/05/08(土) 15:29:43 ]
#include<stdio.h>
int main(void){printf("%[d]"[2+3-1])}
の計算cygwinでやったんですが、でてきません。
どこが間違ってるでしょう?
一〇進の計算です。4とでてきません
基礎すぎてすいません・・・

744 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:34:12 ]
>>743
・コンパイルエラーが出る場合はエラーメッセージを貼りましょう。
・何か参考にした資料があるなら明記しましょう。

まぁ、突っ込みどころは山ほどあるけど正解を以下に。
--
#include <stdio.h>
int main()
{
printf("%d\n", 2 + 3 - 1);
return 0;
}
--
尚、空白・改行は適宜変更してもいいが、記号類は省略も追加もしないこと。

745 名前:デフォルトの名無しさん [2010/05/08(土) 15:43:40 ]
>>744
レスありがとうございます。
ですが
それでやってみたところ
chmod:missing operand after `755'
Try `chmod--help'' for more inormation.c
とでてきたんですが??
755ってなんですか?ずっと755がでるんですが

746 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:52:35 ]
>>741
「ポインタに対する単項の*演算子禁止」なんて規約が存在する、
というのは嘘でしたってことでいいのね?

747 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:54:31 ]
>>745
コマンドラインパラメータの不足
C言語関係なし
コンパイル方法(打ち込む文字)が間違ってる

748 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:56:26 ]
>>745 いったい何を「やってみた」んだ?

749 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 15:59:58 ]
>>745
エラーメッセージを貼るときはきちんと貼りましょう。
また、自分が何をやったらそうなったのか、必要ならコマンドラインのコピーも交えて説明しましょう。
まぁ、最早Cの問題じゃないことは>747の言う通り。
このまま続けたいならエスパースレへ。

750 名前:デフォルトの名無しさん [2010/05/08(土) 16:00:40 ]
やってみたとは、プログラムの実行です。
gcc(ファイル名>>744のソース)をするとerrorがでました。
コンパイルエラーというのはプログラムの中身にエラーがあるとき
出るのですよね?

751 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:02:28 ]
chmodできないのはコンパイラか。
取り敢えず、コマンドラインを貼れないならソースファイル名を晒してみようか。

752 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:23:32 ]
厳密に言うとコンパイラ本体じゃなくてコンパイラとリンカを呼び出すスクリプトがエラーを出してる
missing operandだからソースファイル名がちゃんと入力されていないか、
コンパイルエラーでオブジェクトが生成されなくてリンカの手前でエラーが出てるかだと思う



753 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 16:47:51 ]
>>750
コンソールを全部引用しろよ
お前クラスの素人の場合、普通の人が想像もしないことを
やってるから、抜粋すると解決しない

だいたい勝手にchmodが動くわけないし、誰かの作ったMakefileを
流用してるとかで、どっかで起動してるんじゃねーの

754 名前:734 mailto:sage [2010/05/08(土) 18:37:34 ]
>732 >741

参照資料を見たけどさ、
「ポインタへの整数の加減算は使用せず、確保した領域への参照・代入は[]を用いる
配列形式で行う。」
としか書かれていないよ。
ポインタ演算禁止とは書かれておらず、丁寧に
「ポインタの演算を行う場合には、ポインタの指す範囲に気を付ける。」
と書いてある。

技術用語には「厳格な」定義があるので、勝手にねじ曲げないように。
>728で挙げている、あなたの感覚はおおむね間違っていないが、
理由付けからは、根本的な理解の甘さがかいま見える。
そのせいで、色々つっこまれている。

今回引っかかった表現は
×「ポインタに対する単項の*演算子は厳格なコーディング規約では禁止される。」
×「ポインタ演算も禁止される場合がある」


755 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:45:08 ]
>750

すでにつっこみが入っているが、何をやっているのかさっぱりわからない。

>やってみたとは、プログラムの実行です。
>gcc(ファイル名>>744のソース)をするとerrorがでました。

2行目でやっていることはコンパイルであって、プログラムの実行では無いぞ。
コンパイル中にchmodが勝手に走るなんてことは無いと思うけど。

>コンパイルエラーというのはプログラムの中身にエラーがあるとき
>出るのですよね?
chmod:missing operand after `755'
Try `chmod--help'' for more inormation.c
これはコンパイルエラーではない。chmodのエラーで、引数が無い
という意味。なんでchmodが出てくるのか、想像できない。

コンソールをそのままコピペして貼り付けてみたら?
もっともCの問題ではないと思えるが。

756 名前:デフォルトの名無しさん [2010/05/08(土) 19:42:10 ]
>>755
すまん、弟に聞いたらできたよ。
gcc OOO.c

a.exe

で実行でできた、あなたが間違ってるとかじゃなかったから
ごめん。
また来るよ。


757 名前:デフォルトの名無しさん [2010/05/08(土) 19:44:13 ]
今人いるかな?質問させていただきます
char型の'1'をint型の1にしたいんですけど、テストしたら49になってしまう
どうやったらいいです?

758 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:45:17 ]
48を引きます。

759 名前:デフォルトの名無しさん [2010/05/08(土) 19:47:08 ]
>>758
今VBでやってるんだが、
ほかのコンパイルでもそれで結果同じになるならいいんだがどうなんです?

760 名前:デフォルトの名無しさん [2010/05/08(土) 19:47:49 ]
コンパイラーでした間違えた

761 名前:>>757 [2010/05/08(土) 19:57:04 ]
ちなみにキャスト代入でやった
while文で、ひとつずつchar型の数字をint型にしたいんだがどうすればいいんだorz

762 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:07:34 ]
ここはC言語スレです。
VBの質問ならVBスレへどうぞ。



763 名前:デフォルトの名無しさん [2010/05/08(土) 20:08:23 ]
VBでC言語やってるんだ
誤解させてすまぬ

764 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:20:39 ]
>>761を読む限りではこんな感じ

int i, n[ 5 ];
char s[] = "12345";
for( i = 0; i < 5; ++i )
n[ i ] = s[ i ] - '0';

765 名前:デフォルトの名無しさん [2010/05/08(土) 20:22:44 ]
>>764
ありがとうございます!
あとでやってみます

766 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:25:44 ]
>>761
char型の数字をint型に
int intsuji = charsuji - 48;

while文で、ひとつずつひとつずつ
何をしたいの?

767 名前:デフォルトの名無しさん [2010/05/08(土) 20:29:30 ]
>>766
char型に入ってる数字を一文字ずつint型にいれるっていうことを
配列でやってるんでなんか簡単にまとめられないものかとおもって;

768 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 21:05:44 ]
>>767
やりたいことを具体的に書いた方がいいよ。

769 名前:デフォルトの名無しさん [2010/05/08(土) 21:34:22 ]
>>768
そうですね、あんまつたわらないしよくなかったとおもいます
こんどからそうします;
>>764
そのやり方でできました。ありがとうございます。

770 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 22:39:41 ]
#include <stdio.h>

int main(void)
{
printf( "%d - %X + %o = %d\n", 398, 1FB , 327 ,398-1FB+37 );

return 0;
}
これどこが間違ってますか?cygwinでこれを実行したら前のプログラミングがでました。
間違えたプログラミングだと実行したら前やった実行がそのまま出るっぽいです。



771 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 22:41:39 ]
>>770
1FB じゃなくて 0x1FB じゃないの?

772 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 22:47:54 ]
レス早い、本当助かる。
なぜ0xをつけるんですか??!??!

あと質問ですが何故int main()っているんですか?
printfだけじゃだめなんですか?ただの数値計算なんですが・・・




773 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 22:48:45 ]
すげぇww
できたwww0xつけたらできた。涙出てきたわ。ほんまありがとう
また来るよ。

774 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 22:50:01 ]
二度と来るな

775 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 23:23:23 ]
ひでぇ・・・w
1FBって16進だろ
16進ってことを表すのが0x

c言語はint main()っていれなきゃいけない
これは関数だからc言語は関数型言語

776 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 23:24:37 ]
>>775
手続き型言語じゃないの

777 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 23:42:42 ]
最初よくわからなかったものが
わかるとなんでわからなかったのかわからなくなる

778 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 23:51:21 ]
>>775
えっ

779 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:09:04 ]
18禁ゲームからエロシーン削除して家庭用に移植というくだらない事、最初にやったアホがいると聞いて

780 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:10:49 ]
C言語では、プログラムがどこから始まるか、ちゃんと書かなきゃいけないルール。それがmain()
C言語を発明した人がそう決めた。

ほかの言語だとファイルの先頭からいきなり始まるやつもあるし、そういうわけわかんないルールを
覚えるのも含めてプログラミングの勉強だから。

781 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:50:35 ]
JavaやC#よりはマシだな

782 名前:デフォルトの名無しさん [2010/05/09(日) 07:49:11 ]
entry は結局日の目を見なかったね



783 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 12:11:22 ]
mainってただの慣習じゃないの

784 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 12:21:32 ]
>>783 ちがうよ。規格で定められている関数だよ。

785 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 12:38:36 ]
え?そうなの?
じゃぁWinMain使うときはどういう扱いなの?

786 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 12:43:57 ]
単なるコンパイラの独自拡張

787 名前:デフォルトの名無しさん [2010/05/09(日) 12:56:59 ]
>>785
規格ではフリースタンディング環境に分類される
OS はないことになっているので、あくまで利用者定義ライブラリという位置づけ

788 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 13:00:50 ]
>>786,787
ありがとうございました


789 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 15:54:38 ]
質問します。
#include <iostream>
using namespace std;
static char *plus(char *fp_c, char *fp_c2);

int main()
{ char buf[]="ab,cde,fghi",buf2[100];
char *fp_c,*fp_c2;

fp_c=buf;
fp_c2=buf;

fp_c2=fp_c2+2;
*fp_c2=0x00;
strcpy(buf2,fp_c);
cout << buf2 << '\n';

fp_c,fp_c2= plus(fp_c,fp_c2);

fp_c2=fp_c2+3;
*fp_c2=0x00;
strcpy(buf2,fp_c);
cout << buf2 << '\n';
return 0;}

char *plus(char *fp_c, char *fp_c2){
return fp_c2++; //1進める
return fp_c=fp_c2;}
関数plusの中でポインタを1進める物を作ろうとしたのですが
実行すると、関数の中に入ってないのか、先頭のポインタに戻っているのか
上手くいきません。上手く関数を使いポインタを進めるにはどうしたらよいのでしょう?

790 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 16:33:21 ]
警告、いや、エラーも出ると思うが、また、お笑いコードを書くなよ
っていうかスレチ

791 名前:デフォルトの名無しさん [2010/05/09(日) 21:45:19 ]
皆さんの知恵をお貸しください

今度学校の授業でモジュラス10ウェイト3のC言語のソースを書くことになったのですが、どのように入力した
数値を使ってチェックコードを導くのか苦戦しています。

どのような方法で考えればいいか教えてください。

792 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 21:46:15 ]
>>791 宿題スレ池。



793 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 22:31:02 ]
日本語で

794 名前:デフォルトの名無しさん [2010/05/09(日) 22:36:40 ]
>>791
scanfで数値を取得して、後は粛々と計算で終了では?
何を苦戦しているのか全くわからない。

795 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:24:40 ]
質問です。
すでに入力されている文字列"12345678"があるとして、 "1234"だけを表示させて後は表示させないにはどうすればよいのでしょうか。
%cで一つずつ表示しか思いつかなかったのですが、よい方法はありますか?

796 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:34:49 ]
>>795
#include<stdio.h>

int main(void)
{
char buf[256]="12345678";

printf("%.4s", buf);
return 0;
}

797 名前:デフォルトの名無しさん [2010/05/09(日) 23:34:54 ]
printf("%.4s", "12345678");

798 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 23:35:08 ]
5の部分を\0に書き換える

799 名前:795 mailto:sage [2010/05/10(月) 01:51:59 ]
素早い回答有り難う御座いました。

800 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:29:34 ]
Cの勉強初めて数日の者ですが質問です

#include<stdio.h>

main(){
char a,b;
scanf("%c",&a);
printf("%c",a);
scanf("%c",&b);
printf("%c",b);

return 0;
}

これを実効すると
一つ目の文字を入力した時点で終了してしまうのですが何故でしょうか?

801 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:35:40 ]
コンピューターの機嫌が悪い

802 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:44:29 ]
>>800
例えば、プログラムを実行して
1[改行]
と入力した場合、入力内容は
'1\n'
となる。
よって、2つめのscanf()が実行された時点で、未読込の文字'\n'があるので、
2つめのscanf()は、更なる入力を待たず b に '\n' を代入してすぐ返る。
よって一つ目の文字を入力した時点で終了してしまうように見える。



803 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 02:48:42 ]
>>802
なるほど
納得しました
ありがとうございました

804 名前:795 [2010/05/10(月) 02:57:13 ]
お早い回答ありがとうございました。

805 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 12:01:15 ]
getchar()やscanf()のような文字単位処理関数と端末エミュレータの一行編集とが相性悪いんだよな。
その点だけはGUIの方が初心者には判り易いと思うんだが。
# 尤も、そこに辿り着くまでの長い道程がGUIの最大の欠点なわけで……

入門書ではscanf()やgetchar()を使わず、全部コマンドラインオプションでやる方がシンプルに説明できるんじゃないか?
# そうすると、今度はコマンドインタプリタの余計なお世話を回避することを学ばないとならなくはなるけれど。

806 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 14:07:23 ]
>>805
コマンドラインオプション?
コマンドインタプリタ?

意味が通じてない。えらそうなこという前に正しい用語ぐらい覚えておけ。

807 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 14:47:07 ]
>>806
コマンドライン引き数、コマンドラインインタプリタと言えばご満足?

808 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 14:48:53 ]
つーか、>805が偉そうだと思えるほど、>806は自信の知識の足りなさを実感しているのだろうな。

809 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 15:01:20 ]
えらそうな人は実際えらい

810 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 15:02:27 ]
原始UIと入出力はプログラミングの基本だろ
それ無しでどうやって入門するんだよ

811 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 15:24:39 ]
scanfなんて最初の勉強以外で使ったこと無いな

812 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 17:09:08 ]
>>806 も少しうざいけど、
>>805 の発言こそ「えっ」なんだが。



813 名前:JaneDoeの抽出って便利だな mailto:sage [2010/05/10(月) 17:15:50 ]
なんで>729とか>731とか>778とか>812って、その「えっ」の内容を書かないんだろうな。
余程自信がないんだろうか。

814 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 17:40:16 ]
>>813
書かなくても普通にわかるだろwwww
お前が書いた本人なの?添削して欲しいの?



815 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:05:54 ]
>>805
まじで何が言いたいのかさっぱりわからん。

>>807
それならますます意味が通じなくなる。
国語の成績が最低だったことだけはわかる。

816 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:26:16 ]
おれが訳してやろう

getchar()やscanf()ってコマンドラインから入力とかに素直に使えないよな
だから初心者はGUIのほうがいいんだろうけど、GUIはやりたいことやるまでのおまじないの解説とかが多いしな

いっそコマンドラインのやつはパラメータを全部引数にしちゃって渡すとかが入門にはいいかな
でも、それだと引数の解釈のところがめんどくなるだけか

みたいな話だと思う、要は、えらそうにアレにもこれにも文句つけてるけど特に建設的な意見はない人だ
国語の成績はよかったと思うよ、大した事言ってないのにえらそうにするやりかたとかさ
でも、人に説明とかは苦手(で、通じなくて相手を馬鹿にして非難)な人だろうな

817 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:49:06 ]
>>816
翻訳ありがとー
彼の言ってる内容はわかったが、その内容に意味がないこともよくわかったわw

818 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 18:50:43 ]
研修でscanf()の使用を禁じられていたので。

819 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 19:08:53 ]
同じ言葉を2回続けるとニュアンスが正反対になるよ!ふしぎ!


はい
はいはい

820 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 19:19:05 ]
>>815
それはお前が低脳だからだよ
高脳なら低脳の書いたよくわからん文でも理解できるが、
低脳はさっぱりわからんで終わり。
俺も低脳だから>>805はよく分らんがな
>>817
周りは普通脳以上は、やれやれ低脳にはこんなことまでしてやらないと理解できないのか
低脳は大変だな、これじゃ仕事でも手間かかるなだろな。

821 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 19:38:52 ]
>>805 の言いたいことは解るけど、
「相性が悪い」という点に同意できないんだよ。

822 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 19:50:03 ]
>>821
それはお前が低脳だからだよ



823 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:12:00 ]
仕方ない。俺が >>805 を翻訳してやろう
-- 
 >>getchar()やscanf()のような文字単位処理関数と端末エミュレータの一行編集とが相性悪いんだよな。 

 getchar()とかscanf()のような標準入力からデータを受け取る関数は、
 echo offにしてないと出力と入力のechoが混ざって相性悪いんだよな。

 >>その点だけはGUIの方が初心者には判り易いと思うんだが。 
 >># 尤も、そこに辿り着くまでの長い道程がGUIの最大の欠点なわけで…… 

 その点GUIはそういうToLoveるが無いので初心者も安心。
 もっともGUIアプリを作るなんて、初心者には果てしなき道のりなわけで…… 

824 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:41:00 ]
getchar()はいいだろ。
素直にストリームの動作のイメージを反映してるし。


825 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 00:05:25 ]
問題は、行内編集ができるから一文字ずつ入力するのに向かないってことでしょ。
getchar()で一文字入力しようとして「なぜか先に進む」類の罠に嵌まる質問が後を絶たないからね。

826 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 01:35:25 ]
だから、単におまえの望む動作になってないってだけで全然相性は悪くないだろ。
ついでに言うと、1行編集は端末エミュレーターの機能じゃねえよ。
無知をさらしてるってことに早く気付けよ。

827 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:08:52 ]
ファイルを分割するプログラムで疑問に思った点があります
質問させていただきます

fseek(fp, 0, SEEK_END)
ftell(fp)

としてサイズを取得した場合
今の自分の目的としているものが 195768 バイトのファイルなので
値としても 195768 とでてきます
しかし、

fseek(fp, 0, SEEK_SET)
ftell(fp)

として見てみると、この値は 0 とでてきます
ファイルポインタを先頭に置いているときは、
ftellの結果は 1 と出てくるのが妥当ではないかと感じるのですが
(fseek(fp, 195768, SEEK_SET) と
 fseek(fp, 0, SEEK_END)
が一致するなら、データが 195769 個あるように思うため)
先頭、あるいは末尾がopenしたファイルのデータとは異なる
特殊なものになっているのでしょうか?

分かりにくいかと思いますが、上手く説明できず申し訳ないです

828 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:12:16 ]
>>827 fseek(fp, 0, SEEK_END) のあとに fgetc(fp) してデータが取れるかな?

829 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:13:34 ]
>>827
0バイトのファイルで考えてみて

830 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:14:18 ]
>>827
char file[195768] に対する添え字と同じ。
fseek(fp, 0, SEEK_END) は &file[195768] ってこと。

831 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:15:19 ]
うほ、なにやら沢山ありがとうございます
付けてもらったレスみて考えてみます
感謝

832 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:28:37 ]
みなさまのおかげで修正したプログラムも無事動きました
ありがとうございます



833 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 02:39:06 ]
>>827
> ファイルポインタを先頭に置いているときは、
> ftellの結果は 1 と出てくるのが妥当ではないかと感じるのですが

ファイルアドレスは 0 から始まるので、ファイルポインタが先頭、つまり
0 バイト目にある時は ftell() の結果は 0 と出るのが妥当です。
ファイルサイズ 0 の場合に fseek(fp, 0, SEEK_END) した時、ftell() が 1 を
返すのは妥当ではないと感じませんか?
ファイルサイズ 1 の場合に fseek(fp, 0, SEEK_END) した時、ftell() が 2 を
返すのは妥当ではないと感じませんか?

> fseek(fp, 195768, SEEK_SET) と
>  fseek(fp, 0, SEEK_END)
> が一致するなら、データが 195769 個あるように思うため)

いきなり 195768 のように大きなアドレスを扱うから混乱します。
まずファイルサイズ 0 の場合を考えてみてください。
fseek(fp, 0, SEEK_SET) ないし fseek(fp, 0, SEEK_END) をしてもファイル
ポインタは先頭、つまり 0 バイト目を指したままですが、そこに 1 個目の
データが存在すると思いますか?
いいえ、存在しません。

同様に、ファイルサイズ 195768 の場合、fseek(fp, 195768, SEEK_SET)
ないし fseek(fp, 0, SEEK_END) をしてもファイルポインタは 195768 バイト
目を指しますが、そこに 195769 個目のデータが存在すると思いますか?
ファイルサイズ 195768 なのに、最後の 1 バイトのデータはどこから来る
のでしょう?
いいえ、どこからも来ません。データは 195768 個しかありません。

ファイルポインタが指している場所に必ずしもデータが存在するとは限り
ません。

834 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 03:45:02 ]
コンソールに計算式(例:34+4)を入力して演算結果を出力するプログラムを作っています。
作ってみたのですが、足し算しかうまくいきません。
どこが違ってるのかよくわからないのでアドバイスください。

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10592.c


835 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 04:07:50 ]
>>834
if(p!=NULL){
b = atoi(p + 1);
printf("%d + %d = %d\n", a,b,a+b);
} else if(q!=NULL) {
c = atoi(q + 1);
printf("%d - %d = %d\n", a,c,a-c);
} else if(r!=NULL){
d = atoi(r + 1);
printf("%d * %d = %d\n", a,d,a*d);
} else if(s!=NULL){
e = atoi(s + 1);
printf("%d / %d = %d\n", a,e,a/e);
}

836 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 04:38:18 ]
なんでb, c, d, eを分けてるの?
ch1, ch2, ch3, ch4は何の意味があるの?

837 名前:デフォルトの名無しさん [2010/05/11(火) 12:15:32 ]
>>834
それ以前に
文字列の初期化なし
入力妥当性チェックなし

838 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 12:29:04 ]
>文字列の初期化なし
ってなんの話?

839 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 12:30:49 ]
空の文字列入れるとか、memsetで埋めるとかしないと
何にも入ってない不定の状態での格納は危険じゃないかと。
あと、ch1〜ch4に入れるときのキャストがなんか気持ち悪い。

840 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 12:37:33 ]
>>839
>何にも入ってない不定の状態での格納は危険じゃないかと。
どんな危険があるのですか?


841 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 13:12:06 ]
0でターミネートし忘れた場合とかぬかすんだろどうせw

842 名前:デフォルトの名無しさん [2010/05/11(火) 14:29:03 ]
至急!!!!

任意個数の整数を標準入力(キーボード)から入力し、
入力された整数の個数
平均値(小数点以下 1 桁まで表示)
最大値
最小値
を標準出力(ディスプレイ)に表示するプログラムがわかりません。




843 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 14:29:52 ]
ただし、9999が入力されたら入力を終了するものとし、9999は入力個数、平均値、最
大値、最小値には含めない。
また、最初に9999が入力された場合には、入力個数=0、平均値=0.0、最大値=0、
最小値=0が出力されるようにする。


844 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 14:37:52 ]
>>842
わかりました!!!!

845 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 14:55:29 ]
>>834
NULLだろうけど変数が多いね。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10593.txt
やりたいのはこういうこと?

846 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:01:03 ]
>>842
まず、入力がなくなるまでループ
最初の1個目を最大値、最小値とみなす
2個目以降は最大、最小を調べる
合計値に順次足していってループ回数もメモっておく
ループ抜けたら最大値、最小値、平均値を出力しておわり

847 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:03:30 ]
小数点一桁目まで出すのなら %.1f だっけ?

848 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:04:59 ]
>>846
それができないから聞いてるんですけど・・・

849 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:27:07 ]
>>484
なぜ出来ないか詳しく。
制限のためか、それともC言語を書けない為か?

850 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:35:03 ]
ここまで書いたけど・・・とソース晒すとか、何がわからないのかを具体的・端的に説明するとかしない奴は
プログラムを自分で書く気はない。
宿題スレへ。

851 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:36:27 ]
宿題スレどこ?w

852 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 15:48:34 ]
死ぬがよい



853 名前:デフォルトの名無しさん [2010/05/11(火) 16:44:46 ]
課題で出たんですが
アルファベット1文字と整数型の数値 n を読み込んで,その文字の n 文字後の文字を表示するプログラムを書きなさい
とはどういうことでしょうか?アルファベットとは数値のことですか?全体的に問題の意味が
わからないんですが・・・

854 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 16:53:55 ]
>>853
アルファベット1文字・・・A-Z a-z
整数型の数値n・・・0-99999999...

A + 0 = A
A + 1 = B
A + 2 = C ...

855 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 16:56:56 ]
はぁ?アルファベットはアルファベットだろうが
つかCの話でもなんでもないじゃん

たとえば

a5 なら a から5番目→g
f3なら fから3番目→i
D1なら E ってことだろ

もらった文字に数字足して、zをこえるならAに残ったぶんを足すんじゃね?




856 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 16:59:21 ]
a5 なら a から5番目→f だったwww
zまで行ったらAにもどるのめんどいなら
「そこに文字はないです」って言って再入力させるとか

857 名前:デフォルトの名無しさん [2010/05/11(火) 17:40:08 ]
うん?よくわかりません、アルファベットってのは数字に値するんですか?
どういう数え方ですか?アルファベットにアルファベットを足したら?
このプログラムの方法もよくわかりません。頭悪くてすいません・・・一応
今日も徹夜・・

858 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 17:49:22 ]
>>857
アルファベットの文字コードのことなんだけどね。

char c = 'A';

という構文はわかる?
そして

c = c +1;
putchar(c);

とすると画面には B と表示されるんだけど・・・

859 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:03:43 ]
>>857

アスキーコードでググれ
どのアルファベットがどの数字に割り当たってるのかわかるし
順番に並んでるのを見れば理解も早い

860 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:08:33 ]
いろいろな操作を行って、例えばABCD\0が入っている文字配列Z[5]を
空にする(宣言直後の状態に戻す)方法はありますか?
例えばループ中で代入しようとするとエラーを吐いてしまいます。

まだかなり初心者だと思いますが、よろしくお願いします。

861 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:13:04 ]
>>860
とりあえず、君が書いたコードを貼れよ

あと宣言直後は空でなく、デタラメな文字が入ってるよ。

862 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:28:58 ]
>>860
memset( Z, 0x00, sizeof( Z ) );



863 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:29:58 ]
>>860
for(i=0;i<=5;i++)としてないかな?
添え字は0から始まるので要素数5の場合は
for(i=0;i<5;i++)として0〜4の範囲を指定せねばいかんよ。

初期化の方法は
Cならmemset
WinAPIならZeroMemory
C++ならstd::fill
使い回さずにその都度宣言した方がいいと思う


864 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:31:35 ]
宣言直後に入っている文字列を別の配列にコピーしておいてあとでコピーしなおせばいいんじゃないの?何がしたいのか分からんが。

865 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 18:39:44 ]
>>860
*z = '\0';

866 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 20:21:33 ]
>>865
君は C プログラマには向いてないから
BASIC 等をやったほうが良いんじゃないかな。

867 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 20:57:13 ]
>>866
なんだって

868 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 22:16:02 ]
シューティングゲーム作ってるんですが、int型とdouble型では
どちらのほうが計算速度が速いですか?

869 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 22:17:23 ]
double型。

870 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 22:21:20 ]
>>869
ありがとう!

871 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 22:22:40 ]
んなわけないだろ。

872 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:03:44 ]
いやdouble型早いから



873 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:16:39 ]
今時のCPUならほとんど変わらない、まぁ、実測が基本
intからdoubleとかdoubleからintへの変換が多くあると急激に遅くなる
がんばって、固定小数にしてもそれほど早くもならなかったので、浮動小数でいいやとなった
これ以上速くしようと思ったらアルゴリズム改良するかGPUに支援してもらうか、はぁ

874 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:44:15 ]
VIA の CPU なら整数演算でないと激遅

875 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:48:05 ]
浮動小数点型はCPUによって微妙に数値誤差の出方が変わるので
リプレイ機能と相性が悪い聞く事がある
同じIntel系同士でもそうなるのかは俺は知らない

876 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:49:50 ]
使う命令を切り替える実装を使うな

877 名前:デフォルトの名無しさん mailto:sage [2010/05/11(火) 23:56:58 ]
アセンブラでCPUの拡張命令(SSEとか3D Now!!)を叩くしかない。

878 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:11:57 ]
WINAPIのwsprintfでは実数が扱えなかったので、
sprintfを使いました。
そこからWINAPIのTextOut等で、ウィンドウに文字を表示したいのですが、
char *型からLPCWSTRへの変換が出来ないのでエラーになります。
何かいい方法ありませんか?



879 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:22:21 ]
mbstowcsって言えばいいのかな?

880 名前:デフォルトの名無しさん [2010/05/12(水) 00:41:05 ]
>>858
char型って整数の範囲決まってませんでした?じゃぁnが大きいと
計算できないんじゃ?Aは65ってこと?
プログラムにはアルファベットとnを入力させるように作るのですか?・・
初心者に見せかけて相当理解力が弱いんで優しくしてください・・
まじわからんww

881 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:47:53 ]
文字コードってのがあんだよ。
コンピューターは01しか理解できないから文字も01に変換して処理させてるわけ。

882 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:54:44 ]
>>878
tchar.hをインクルードして_stprintf使え。
これでcharではなく、Windows APIのTCHARが使える(正確には、ちと違うが)。



883 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:55:21 ]
>>878
TextOutA()

884 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 00:56:04 ]
ASCIIコード表を見るといいと思うよ。

885 名前:デフォルトの名無しさん [2010/05/12(水) 00:56:55 ]
>>881
文字コードは01じゃないけどな。

886 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:00:07 ]
2進数に直したら全部01だろ馬鹿か

887 名前:デフォルトの名無しさん [2010/05/12(水) 01:00:51 ]
直すからだろw

888 名前:デフォルトの名無しさん [2010/05/12(水) 01:01:49 ]
>>1
山手線符号化したら、全部駅名だろwwアホww

889 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:32:15 ]
>>888
もしよろしければどこへの誤爆かおしえていただきたいのですがいかがですかね

890 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:41:51 ]
>>882
TCHAR の意味解ってないだろ。

>>884
ASCII とは限らないだろ。

891 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 01:49:13 ]
TCHAR?
ティーチャーって先生って意味ですよね。


892 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 07:40:39 ]
>>880
文字コードの文字のところ一部抜粋。
#include <stdio.h>
int main(void)
{
int i;
for (i=61;i<123;i++)
{
printf("%c(%3d) ",i,i);
if((!(i%10))||(i==122))printf("\n");
}
return 0;
}



893 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 08:03:20 ]
>>882
_stprintfから、swprintfの存在を知り、問題なく実数でも扱えて
処理できました。

ありがとう!

894 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 08:31:06 ]
文字コード云々じゃなくてさ、問題の意味がわからないって質問だろ?
アルファベットにアルファベットを足すとか言ってるし、「整数 n」←このnをアルファベットだと思ってるんじゃないの?
入力されたアルファベットにnというアルファベットを足すってどういう意味って聞いてるんじゃないの?

895 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 08:58:14 ]
初心者質問していい?

896 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 09:02:10 ]
だめ

897 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 09:51:53 ]
>>895
どうぞ。

>>894
>「整数 n」←このnをアルファベットだと思ってるんじゃないの?
その発想はなかったw

898 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 12:11:13 ]
どうも元質問者は VBからの移行なのか variant型 が当然のようで

 変数 a に 文字の '1' を与える
 → 整数演算の時 値として 1 に評価される

という思考から抜け出せないでいるようだ

899 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:46:27 ]
PHPとかその辺混乱しまくりw

900 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 15:29:52 ]
いつの話してんだ

901 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 18:57:08 ]
VC++2008を使っています.
画像を入れる配列を3つに増やそうとすると
'System.StackOverflowException' のハンドルされていない例外が ○○.exe で発生しました。
とエラーがでてしまいます.少し調べたところ,unsigned charしすぎて回帰の回数が増えたためなのかと思ったんですが,どうしても配列を3つ以上使いたいのですがあきらめるしかないのでしょうか?
以下エラーの原因と思われるソースの一部です.(main.cpp)
FILE *fp;
unsigned char header[54];
unsigned char screen[400][300][3];//読み込み用
unsigned char screenB[400][300][3];//保存用
unsigned char screenG[400][300][3];//保存用  //ここをコメントアウトしたらエラー消える
//unsigned char screenR[400][300][3];//保存用

/* 画像サイズ */
int yl=400;//y_long //呼び出し履歴によるとここでデバッグが止まる
int xl=300;//x_long

/* ファイルから読む */
fp=fopen("test.bmp","rb"); /* Windowsビットマップ形式 400*300ピクセル,24ビットカラー */
fread(header,1,54,fp); /* ヘッダ(54バイト)を飛ばす */
fread(screen,1,yl*xl*3,fp); /* 残りはデータ(最下行から順に入る) */
//fread(screenB,1,yl*xl*3,fp);
fclose(fp);


902 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:01:11 ]
スタックがあふれるならヒープに取ればいいじゃない、ということで、
mallocとか使って動的にメモリを確保するんです。
多分その段階だとポインタになれてないだろうから、がんばれ、とエールを。



903 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:05:58 ]
取り敢えず、スタックの割り当てを増やすのも手かと。

904 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:09:29 ]
適当にテストするならグローバルにすればよころう。

905 名前:901 mailto:sage [2010/05/12(水) 19:13:58 ]
>>902
ありがとうございます.
もう一度調べなおしてみます.

906 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:06:33 ]
>>901
>editbin /stack:1000000
とかやっとけば OK

907 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:38:04 ]
>>906
なんでそんなひどいこというの?

908 名前:デフォルトの名無しさん [2010/05/12(水) 21:43:28 ]
>>894
質問したものですが
さすがにそれはないです。このスレでも意見分かれてませんか?
nをたくさんたすとzまでいってまたaに戻るとか。
アルファベトに数値をたすって意味が分からないんですよ。
たとえばAに1000足したら?
Aとはそもそも何か、16進数の10番目のやつか、何ちゃら
規格とかのコードなのか。それが分かりません

909 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:50:49 ]
てst

910 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:55:19 ]
>>908
> アルファベトに数値をたすって意味が分からないんですよ。
'A' は0x41や65の別表現でしかない。('A'==0x41==65)
全て内部的にはただの数値。
'A'+1==0x42==66=='B'


911 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:55:20 ]
アルファベットに数字を足す問題ですが、
クラスの友達に聞いて解決しました。
ここの人たちは理解力がなさすぎだと思います

912 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:56:26 ]
>>908
'a'+1='b'
これならわかる?



913 名前:デフォルトの名無しさん [2010/05/12(水) 21:57:59 ]
>>908
ja.wikipedia.org/wiki/ASCII

ここを読めば文字「A」が65に対応してることがわかるとおもうよ。

914 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 22:01:28 ]
まぁ、普通はアルファベットに数値を足すと聞いたらアルファベットを並べて何文字か後のことだ。なんて思わない罠。

915 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 22:58:04 ]
C言語初心者です。入力した整数の数だけ*を表示したいんですが、
エラー続きです。どこをどう直せばいいか教えて下さい。

#include <stdio.h>
int f(int);

int main(void)
{
int no;
printf("整数を入力:");
scanf("%d",&no);
return 0;
}

void(int n)
{
while (n-->0)
putchar('*');
putchar('\n');
}


916 名前:デフォルトの名無しさん [2010/05/12(水) 23:01:23 ]
#include <stdio.h>
int f(int);

int main(void)
{
int no;
printf("整数を入力:");
scanf("%d",&no);
func(no);     //☆
return 0;
}

void func(int n)  //☆
{
while (n-->0)
putchar('*');
putchar('\n');
}


917 名前:デフォルトの名無しさん [2010/05/12(水) 23:02:57 ]
×func
○f

918 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 23:37:56 ]
プロトタイプ宣言と定義で戻り値の型が喰い違っている。

919 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:18:41 ]
>>915
#include <stdio.h>
#include <ctype.h>

/* function prototype */
void disp_char( int );

int main( void )
{
 char no;
 printf( "整数を入力してください:" );
 scanf( "%c", &no );

 if( isdigit( no ) == 0 ) {
  printf( "Error:数値以外の文字が入力されました\n" );
 } else {
  disp_char( no - '0' );
 }
  return 0;
}

void disp_char( int t )
{
 int i;
 char c = '*';

 for( i = 1; i <= t; i++ ) {
  printf( "%c", c );
 }
 printf( "\n" );
}

920 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 02:30:42 ]
>>908
もっと単純に考えたら?
Aの次のアルファベットって何?って聞かれたら困るのかな。そういうレベルよ。
Hの3つ前のアルファベットは?

で、zの次は何?って聞かれた時に、
・ないわー
・最初に戻ってa
・小文字終わったからA
とするか、そこは問題に明記されてないから、あなたが決めなきゃならないという話

921 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 02:31:23 ]
解決してタワーorz

922 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 03:55:38 ]
成りすましにマジレスしなくてもw



923 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 09:44:49 ]
Cでプログラム組んでます。
ファイルの扱い方で質問があります。

fopen、fread、fwrite、fseek、fclose
でファイルの読み込みや書き込みを行っているのですが
あるファイルを読み書き可能状態でfopenして
10バイトfwiteしたあと、fcloseせずに
書いたデータをファイルの最後から1バイトずつfseekして
freadして、その1バイトが特定の条件に一致した場合に
そこまで読み込んだデータを破棄して
10-fseekしたバイト数だけのファイルを作りたいのですが
そんなこと可能なのでしょうか?

fwiteする前に書き込みデータをチェックしたかったのですが
その部分には手を入れられないため、
1度書き込んだファイルの途中をぶった切れるのかが知りたいです。

■■■■■■■□□□

□を破棄して、■だけのデータを作りたいというようなイメージです。

924 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 09:55:29 ]
chsize

925 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 09:56:49 ]
>>923
ftruncate()が使えればできなくはないが、事情が許すなら別ファイルに書き出すのが無難。

926 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 10:00:44 ]
>>923
fclose()した後に切り詰めたいなら>924かtruncate()、開いたまま切り詰めたいならftruncate()。
但し、後者はファイルハンドルをfileno()で取得する必要あり。

927 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:53:32 ]
フィボナッチ数列を出力するプログラムを書いたのですが
どうもうまく動きません
どうすればいいでしょうか
#include<stdio.h>
#include<stdlib.h>
#define TERM 30
int main(void){
int fivo=0,n=0,temp;
FILE *fp;
fp=fopen("fivo.txt","wt");
if(fp==NULL){
fprintf(stderr,"ファイルオープンエラー");
exit(1);
}
while(fivo<=TERM){
if(fivo==1||fivo==2)n=1;
fprintf(fp,"F(%2d)=%10d\n",fivo,n);
fivo++;
temp=n;
n+=temp;
}
fclose(fp);
printf("正常に終了しました\nfivo.txtに保存しました");
return 0;
}






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef