C言語なら俺に開け! Part 〈54〉
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG質問する前には最低限Googleで検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
コンパイラを探しているなら >>2-13 を。
上記を逸した場合の結果は激しく未定義だゴルァ!!
∧_∧
( ´∀`)< ぬるぽ
C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
0153デフォルトの名無しさん
NGNGsprintf
0154デフォルトの名無しさん
NGNGサンクス
0155141
NGNG>>142さんの方法で無事解決です。
総ツッコミ受けているように明らかに酷いソースなんですが、自分の環境下で一回満足に
動けばそれでいいというものなのでこんな感じに・・・。こういう場合でもちゃんと作るべき?
0156デフォルトの名無しさん
NGNGそういうときはawkでも使うのが無難。
cで書くにしても、普段からちゃんと書く癖をつけておけばバグが減ると言うものです。
0157デフォルトの名無しさん
NGNGstruct CELL {
int element;
LIST next;
};
これを用いて
整数のリストを引数とする
再帰的な選択ソートのプログラムを教えてくれませんか?
0158デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1045074808/l50
0159157
NGNG0160デフォルトの名無しさん
NGNG代入先の変数の型に自動で変換される ってことは
イメージ的には代入元を代入先の型にキャストした値が
代入されると考えて良いでしょうか?
0161デフォルトの名無しさん
NGNGそれでいい。
0163デフォルトの名無しさん
NGNGint value1 = 800000;
double value2 = 0.000000125;
として、
printf("result = %d\n", (int)((double)value1 * value2));
とすると、結果は1とならず0となります。
なぜ1にならないのでしょうか?
0164デフォルトの名無しさん
NGNG800000*0.000000125=0.1ですよ。。。
0165デフォルトの名無しさん
NGNGあ、8000000でした。すみません。
関係ないけど、スレタイ「開け」になってるね。
0166デフォルトの名無しさん
NGNG知らなかったよ(TT)
0167163
NGNGtmp1 = 0.000001;
tmp2 = 1000000;
の時点で結果が0になってしまった。
キャストの問題でしょうか?
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGgccだと最適化の程度によって答えが変わる罠。
冗談はさておき、小数の方が2の負のべき乗になっていないために
演算精度の関係で積が(1に極近い)1未満になっていると思われ。
最適化を強くすると事前に積を求めてしまうのでイミディエイトの1になってしまう。
というわけで、キャストのときは精度に注意しましょう。
0171デフォルトの名無しさん
NGNGそのごみのようなページは何?
0173デフォルトの名無しさん
NGNG>printf("result = %d\n", (int)((double)value1 * value2));
を
printf("result = %d\n", (int)((double)value1 * value2 + 1e-10));
とでもしてみたら?
0175デフォルトの名無しさん
NGNG0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG実数演算を厳密にやろうとしたら常に精度に注意を払わないといけなくなる。
例えば、0.1を10回足しても1にはならないという現象も出てくる。
10進数の小数を2進数で表現する以上、避けては通れない道だと思うしか。
0178デフォルトの名無しさん
NGNG%gだと高々6桁程度の精度で丸めるからな。
>>176
そだね。
逆に、2^(-12)は劣化しないけど。
0179163
NGNG{
int value1 = 8000000;
double value2 = 0.000000125;
double result;
result = (double)value1 * value2;
printf("result = %d\n", (int)result);
}
結局こうしてみました。
>>175
int型で表現したかったので、すみません。。説明不足でした。
>>177
そうですね。今後気をつけます。
皆様ありがとうございました。
0180デフォルトの名無しさん
NGNGrintかround。
0181デフォルトの名無しさん
NGNG部分をintに入れるだけだよ。だから179のコードでも結果は同じだと思う。
0182デフォルトの名無しさん
NGNG単に他の変数に放り込んだだけのように見えます。
本質的に >>163 とどう違うのか、誰か教えてください。
0183デフォルトの名無しさん
NGNG一旦doubleの変数への丸めが入る段階で巧くいくこともある。
勿論、巧くいかないこともあるからεを足す工夫は必要。
round()を使ってもいいが、(int) (double値 + 1e-15)でも充分。
0184デフォルトの名無しさん
NGNG数学的には整数になることが元々予測できてたんじゃないか?
技術系の計算ではたまにあるよね、そういうこと。
そういったシチュエーションだったら、1.e-10とか1.e-15とかいう半端な数を
突然持ち出すより、いっそ「四捨五入」という意味で、
(int)(double値 + 0.5)
とする方がスッキリ納得してもらえるんじゃない?
0185デフォルトの名無しさん
NGNG#define fname "data.txt"
....
strcat(buf,fname"がないよ");*/strcpyでも良い/*
....
という第2引数書き方はC言語的にやって良いのでしょうか?
文字列の扱いはあまりよくわからないので・・・。
0186デフォルトの名無しさん
NGNG文字列は、"abc" "def"のように書くと"abcdef"と解釈される。
なので、
fname "がないよ"は問題なし。
しかし、
・define名は大文字にするのが一般的
・コメントの書き方が変
・一般的にstrcpy()でもstrcat()でもいいなんてことはないはず
・もしそうだとしたらどこかに無駄があるかもしれない
・そもそもsprintf()を使うほうが無難なケースなのかもしれない
とまぁ、このくらい書いておけば後で誰か突っ込んでくれるだろう。
0187デフォルトの名無しさん
NGNGこれだけ、他のつっこみとレベルがちとズレてるな
とチャチャ入れ
0188デフォルトの名無しさん
NGNGchar sz[] = {"/*
#define fname "data.txt"
....
strcat(buf,fname"がないよ");*/strcpyでも良い/*
....
*/"};
こんな感じになってるなら問題ない。
0189185
NGNGthx! 謎が解けました。
コメントはこのスレ用に書いたものだったけど、どうもやり方間違えたようですな。
sprintfでも良かったんですけど、使ったことの無いやつを試してみたかったのです。(汗
ともあれ、ありがとうございました。
0190デフォルトの名無しさん
NGNGありありだろ(w
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG0193デフォルトの名無しさん
NGNGvoid change(char* a){
a = "AAAAAAAAAAAAAAAAAA";
}
int main(){
char *test1;
test1 ="HelloWorld.";
change(test1);
printf("test1 : %s\n", test1);
return 0;
}
test1の内容を"AAAAAAAAAAAAAAAAAA"
に変えようとしてるのですが"HelloWorld."
のままです。
なんででしょう?
0194デフォルトの名無しさん
NGNGvoid change(char** a){
*a = "AAAAAAAAAAAAAAAAAA";
}
int main(){
char *test1;
test1 ="HelloWorld.";
change(&test1);
printf("test1 : %s\n", test1);
return 0;
}
0195デフォルトの名無しさん
NGNGそれだと動きました。どうもです。
でも、どうしてポインタが2つも必要なんでしょう?
0196デフォルトの名無しさん
NGNGポインタ変数に書き込んでもらう必要があるから。
int 変数に書き込んでもらうには...
void change(int *x){
*x = 123;
}
int main(){
int a;
a = 0;
change(&a);
...
}
とするのと同じ。
今回は、たまたまポインタ変数だったから 間接演算子 '*' が2個並ぶ。
0197C初心者
NGNGappleを入力した数の分だけ表示させるというプログラムを作ろうと
思って下のようなソースを書いたのですが、実行すると
no newline at end of fileと出ます。何処がおかしいのでしょうか?
間違ってる箇所がどうしても見つからないので分る方ご教授下さい。
ちなみにコンパイラはgccでCygwinで実行してます。他のソースを実行する
際は問題は起きてません。
#include <stdio.h>
main()
{
int a , b ;
scanf("%d" , &a);
for( b = 0 ; b < a ; b++ )
printf("apple ");
}
0198デフォルトの名無しさん
NGNG最後に改行でもいれておあげ。
0199デフォルトの名無しさん
NGNG最後に改行を加える。
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGハッカーは改行で終わっていないと気持ち悪くなるらしいです。
0202デフォルトの名無しさん
NGNGそれだけの理由なの!?
0203C初心者
NGNGきちんと実行できますた。
こんなくだらないことで2時間も延々と迷ってた自分が恥ずかしくなりました。
やっぱり基礎知識は重要ですね。本当今日が今までで一番2チャンが有効活用できますた。
0205デフォルトの名無しさん
NGNGとしたいのですが、ferror() によって errnoが書き換えられる事はないのでしょうか?
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNGファイルの終了を想定しているのか?
0208デフォルトの名無しさん
NGNG別に改行いれなくても実行できるっしょ
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG# setlocale 対応で
0211デフォルトの名無しさん
NGNGfor( i = 0; i<255; i++) ch[i] = isspace(i);
でとれる。
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG255は、どのロケールでもisspaceで真にならないから。
とボケてみる。
0214デフォルトの名無しさん
NGNGWinXP,BCC32で、
--------------------
#include <stdio.h>
void main(void){
char str[15]="abcdefghijk";
int *p;
p=str;
putchar(*p);
putchar(*(p+1));
putchar(*(p+2));
putchar('\n');
}
--------------------
解説書ではabcと出力されるとあるのですが、aeiと出力されました。
変数を変えて+3,+4にしても1ずれるはずのものが4づつずれます。
4飛びになってしまうのはなぜなのでしょう?
0215デフォルトの名無しさん
NGNGchar* p にすればよろし。
理由は自分で調べれ...
0216デフォルトの名無しさん
NGNG手がかりThx.
お礼に何か差し上げたいところですが何も無いので跳躍します。
0217デフォルトの名無しさん
NGNGどこかの国の言葉ですか?
エスペラントみたいな?
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| 1点!!!! |
|_________|
∧∧ ||
( ゚д゚)||
/ づΦ
\ (___ノ
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG配列にタテヨコはないが、二次元配列を使えばいい。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNGソース晒しキボンヌ
0224デフォルトの名無しさん
NGNG# define MAX_COLS 50
#include <stdio.h>
int main()
{
int table [MAX_ROWS][MAX_COLS];
int x;
int y;
for (x= 0; x<MAX_ROWS; x++)
for (y= 0; y<MAX_COLS; y++)
{
printf("%d ", table[MAX_ROWS][MAX_COLS]);
}
fflush(stdin);
getchar();
}
超初心者ですみません。
0225デフォルトの名無しさん
NGNG#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>
int main()
{
int table [MAX_ROWS][MAX_COLS];
int x, y;
for (x= 0; x<MAX_ROWS; x++) {
for (y= 0; y<MAX_COLS; y++) {
printf("%d ", table[MAX_ROWS][MAX_COLS]);
}
printf("\n");
}
return 0;
}
0226デフォルトの名無しさん
NGNGtable[x][y]でしょ。
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>
int main(){
int table [MAX_ROWS][MAX_COLS];
int a=0,x,y;
while(a<300){
for(y=0;y<MAX_COLS;y++){
for(x=0;x<MAX_ROWS;x++){
table[x][y]=a;
a++;
printf("%d ",table[x][y]);
}
printf("\n");
}
}
return 0;
}
汚いけど...
0230デフォルトの名無しさん
NGNGありゃ?これで...
#define MAX_ROWS 6
#define MAX_COLS 50
#include <stdio.h>
int main(){
int table [MAX_ROWS][MAX_COLS];
int a=0,x,y;
while(a<300){
for(y=0;y<MAX_COLS;y++){
for(x=0;x<MAX_ROWS;x++){
table[x][y]=a;
a++;
printf("%d ",table[x][y]);
}
printf("\n");
}
}
return 0;
}
0231デフォルトの名無しさん
NGNGだめぽ...
0232デフォルトの名無しさん
NGNGwhile{}は不要。
xとyの二重ループで300回じゃん。
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGあ、こういう質問は宿題スレのほうがいいかも。
宿題じゃなくても。
0235デフォルトの名無しさん
NGNGそういえばそうですね
0236デフォルトの名無しさん
NGNG0237喧嘩王 ◆52.FsIEe7o
NGNGfor(x=0;x<MAX_ROWS;x++){
table[x][y]=a++;
printf("%d ",table[x][y]);
}
printf("\n");
}
プ━( ´,_ゝ`)━( ´,_ゝ)━( ´,_)━( ´,)━( )━m9( ゚,_ゝ゚)プッ!!
0239デフォルトの名無しさん
NGNG0240山崎渉
NGNG0241デフォルトの名無しさん
NGNGへるぷ嫁
0242デフォルトの名無しさん
NGNG取得したのですがどうすればいいですか?
int a;
int b;
int c;
:
:
printf("a=%d",a);
printf("b=%d",b);
printf("c=%d",c); ←こいつらをLOOPさせて1行にできないか?
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG0245242
NGNG1万個ぐらいの変数(!=配列)があるんです。
1万行のprintfを書くかしかないのか・・・
0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNGif(a<c)p=&a;
else p=&c;
for(i=0;i<3;i++)
printf("%d ", *(p+i));
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG大規模システムの開発とかやったことないんじゃねぇの?プッ
0252デフォルトの名無しさん
NGNGwhile((i = getchar()) != EOF)
printf("printf(\"%c=%%d\",%c)", i, i);
でコードの自動生成はどうだ?
■ このスレッドは過去ログ倉庫に格納されています