>>197 何がはいっていたら、というよりも
printfの引数としても、何も表示されない値があれば知りたいのです
>>199 やはり難しいですか…ありがとうございます。
>>200 char型の中身が出力可能な値であれば、出力用文字列に連結して…といった方法でしょうか
たしかにこれでも結果的に意図する処理は可能となります
>>201 んだから、もしその値があったとして、いつその値を使うの?
常に空も、常に出力もダメなんでしょ?
>>195 char c = 0;
printf("%c", c);
>>203 だめよそれ。
./a.out > foo.dat
として内容をみてみればいい
char outbuf[80];
char c;
c = 0;
sprintf(outbuf, "%c", c);
printf("%s", outbuf);
c = 'a';
sprintf(outbuf, "%c", c);
printf("%s", outbuf);
>>202 例えば前後に別の文字リテラルが出力されたとして、その間を詰めたい時に
使いたいです
でもそれを条件をもとにprintfを行うかどうかを分岐するのはいやなんだよね
>>205 サンプルコードまでつけて頂いて、ありがとうございます。
文字列に格納してから出力するのが一番簡単でしょうか
その方法でやってみようと思います
>>207 はい、できれば。といっても、2〜3行ソースが増えるだけなんですけどね
いいえ、分岐を行うのが一番簡単で速いです。
210 :
205:2010/05/21(金) 00:12:11
>>205の方法にしても0を入れるかどうかの判断が必要なんじゃないか?
と思わんでもないが、納得したならそれでいいや。
階層によっては
>>205の方が楽に進むこともあるだろし。
>>198 だから何もしなければいい。
カンマを打つロジックは必ず通るだろうから。
>>209 横着してました。その方向でいこうと思います。
>>211 すみません勘違いしてました。そういう意味ですか。
ありがとうございます。
冗談に聞こえるかもしれんが「何もしない」というのは最も最適なコードなんだぜ?
一番速く処理できてバグの入り込む余地も全く無い完全な形。
やらんでいいことはやらないっていう、良い意味での手抜きはどんどんするべきだ。
char c = 0;
printf(c?"%c":"",c);
気持ち悪いコードだw
222 :
194:2010/05/21(金) 09:56:55
>>191 #include <stdio.h>
#define COLUMN 4
void in(double (*data)[COLUMN], char name){ int i, j;
printf("%d行%d列の行列%cの各要素を入力してもらいます\n", COLUMN, COLUMN, name);
for ( i = 0 ; i < COLUMN ; i++) {
printf("第%d行の要素を入力して下さい>>>", i+1);
for ( j = 0 ; j < COLUMN ; j++)
scanf("%lf", &data[i][j]);
}
printf("各要素の値は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
for ( j = 0 ; j < COLUMN ; j++)
printf("%c[%d][%d]=%f\t", name, i+1, j+1, data[i][j]);
printf("\n");
}
}
int main(void) { int i, j, k;
double a[COLUMN][COLUMN], b[COLUMN][COLUMN], c[COLUMN][COLUMN];
in(a, 'A');
in(b, 'B');
printf("行列Aと行列Bの積は次の通りです\n");
for ( i = 0 ; i < COLUMN ; i++) {
for ( j = 0 ; j < COLUMN ; j++) {
c[i][j] = 0.0;
for ( k = 0 ; k < COLUMN ; k++)
c[i][j] += a[i][k] * b[k][j];
printf("%8.3f", c[i][j]);
}
printf("\n");
}
return 0;
}
プログラムを書かずにプログラミングが上達する道などないと思うのですがね。
本を読むのは必要条件だが、十分条件ではない。
読むだけでは全然上達しないというのはおかしな話だとは思わんか?
俺も224に同意
よっぽどの天才ならともかく、一般人は読むだけじゃその場は理解したつもりになるだけで、
結局は身につかないと思うけど。
>>225 読んだことにより、書ける可能性が発生する、とは思うけれども、それを上達というかどうかは微妙。
読んでも書けないようではね。
とりあえず
・読むだけでも上達するし、実際効率がいい、レベルアップには必須、ただし全く書かないと上達しない
・未経験SE(または唯一日本固有のSEw)のスーパー勘違いがうざい
もうこれでいいだろ喧嘩すんなよ
230 :
デフォルトの名無しさん:2010/05/21(金) 18:59:06
読んで上達するのは分析力だよね。でもコーディング力より分析力のほうが世間では求められる
つまり口だけプログラマーですね
プログラマがこんな風に言うのを、何度聞いたことがあるだろう?「簡単さ! 1行修正するだけだ!」
>>230 それはコードを読んで、でしょ?
本なりドキュメントなりを読むことで得られる知識なくして上達はありえないよね。
そういう意味で必要条件と書いているんだろうけど、その知識を得ること自体は上達に含まれないのか?ということ。
ここで質問に答えてる人ってプロなの?
235 :
デフォルト:2010/05/21(金) 20:26:20
急に割り込んで申し訳ありません。学生です。
大学の課題ではないのですが、参考書に載っている説明・解説だけでは自分だけでは理解不能なので教えてください。
参考書に載っている文体を変えずに書きます
@次のプログラムの#####のところを埋めて、3人の点数を入力すると平均点を出力するプログラムを作ってみよう♪
int score[5];
int i;
float sum, average;
for( i = 0; i<=4; i = i+1) {
#####
}
for( i = 0; i<=4; i = i+1) {
#####
}
#####
A @の枠組みを用いて、3人の点数を入力すると最高点を出力するプログラムを作ってみよう♪
B10個の値 x[0]〜x[9] を入力して、x[0]〜x[9]の中に偶数があれば「○」と表示し、偶数がなければ「×」と表示するプログラムを作ろう!!!
(複数偶数があったとしても「○」と表示するのは1回だけにしてみましょう。)
配列、for、ifを用いればできると書かれているのですが平均点が0になったりちんぷんかんぷんです。。。
助けてください。
>>235 int score[5];
int i;
float sum, average;
for( i = 0; i<=4; i = i+1) {
##### 点数の入力
}
for( i = 0; i<=4; i = i+1) {
##### 平均点の算出
}
##### 平均点を出力
という意図の問題だと思うけどそこは間違えてない?
0になったりするソースを載せてみるといいよ
問題おかしくないか?
3人の点数なのに5人分のデーターあるぞ
238 :
デフォルト:2010/05/21(金) 20:56:01
>>236 二つ目の平均点を算出するところなのですが、何度やっても0点やマイナスなったりするのですが。。。
239 :
デフォルト:2010/05/21(金) 21:05:07
sumの初期化
241 :
デフォルト:2010/05/21(金) 21:14:14
sum の初期化をしてもきちんとした値が出力されないのですが。
一応自分が書いたプログラミングはこんな感じです。
#include<stdio.h>
int main(void){
int score[5];
int i;
float sum,average;
for(i=0; i<=4; i=i+1){
printf("成績を入力してください。");
scanf("%d",&score[i]);
}
sum =0;
for(i=0; i<=4; i=i+1){
sum += score[i];
}
average =0;
average = sum / 5;
printf("平均点は%d",average);
return 0;
}
>printf("平均点は%d",average);
printf は "%f" とかの方がよくね?
averageに0を代入する必要はない
あと %d じゃない
printf("平均点は%lf",average)
>%lf
笑
246 :
デフォルトの名無しさん:2010/05/21(金) 21:30:37
for(i=0; i<=4; i=i+1){
printf("成績を入力してください。");
scanf("%d",&score[i]);
}
この部分って問題ないの?scanfの悪癖にはまって以来使わなかった記憶が。。
248 :
デフォルトの名無しさん:2010/05/21(金) 22:33:14
>sum += score[i];
これって型が違うと警告でない?
sum += (float)score[i];
とキャストした方がいいと思うよ。出力結果は変わらないけど、何の値を扱っているか
必ず意識するのが、経験上バグが少なくなるから
>>246 最近はコマンドラインで入力するプログラムは作らないけど、入力は文字列で
受け付けて、atof() 等で変換するのが良かったと記憶している。
249 :
デフォルトの名無しさん:2010/05/21(金) 23:00:21
#include <stdio.h>
int main(void){
double a;
short n;
int i, j , k;
n = -15;
a = (double)87654/5 + (double)n;
printf("a = %f\n", a);
return 0;
}
↑これはコンパイルできたのに、全く同形の 次書き込み続きます
250 :
デフォルトの名無しさん:2010/05/21(金) 23:01:55
↓
#include <stdio.h>
int main(void){
double a;
short n;
int i, j , k;
n = -15;
a = (double)87654/5 + (double)n;
printf("a = %f\n", a);
return 0;
}
がコンパイルできないんですが・・・・どういうことでしょう?
本当に困ってます。
まじでわからないんですが・・・・
ちなみに改行 行間まで一緒です。
ただカーソルを段落で移動させると動き方が違うんでうしょね
あ余計なこといったかな、とにかく何が原因だろ。
>>250 コンパイラにパスが通ってないとか。
なんかエラーくらい出てないの?
253 :
デフォルトの名無しさん:2010/05/21(金) 23:17:04
>>252 睨んでるのは数字、数字が全角か半角とかかなぁ?
全角空白?何それwwいきなりラスボス級の試練とか・・・
見えない全角空白どうやって確認ww
やっぱりコピペとかはやめたほうがいいかな・・・
コピペするなら、ソースよりエラーメッセージをしろよ
>>253 何を言っているかよく分からないが、後者のコードには全角空白が含まれている
全角空白やタブはエディタで可視化出来るだろ
257 :
デフォルトの名無しさん:2010/05/21(金) 23:26:43
>>254 Okw 俺がエラメみても分かんないから貼ります
pen.c: In function `main':
pen.c:6: error: stray'129\' in program
pen.c:6: error: stray '@' in program
pen.c:11: error: strary '\129' in program
pen.c:11: error: strary'@' in program
pen.c:16:2: error: warning: no newline at end of file
おそらく全角半角だろどうせwww
258 :
デフォルトの名無しさん:2010/05/21(金) 23:27:43
>>257 全角半角です。本当にありがとうございました。
>>258 (1)
short n;
の行末の全角空白を削除する。
(2)
a = (double)87654/5 + (double)n;
の行頭の全角空白を削除する。
261 :
デフォルトの名無しさん:2010/05/21(金) 23:37:36
>>260 ありがとうwwwwww
これでやっと4つめいける・・・・・・
これだけで1週間考えたからなw何か
目に滲んでくるわw
>>258 サクラエディタやeclipseは全角空白は □ と表示される。他は知らん
int nlz(unsigned k){
union {
unsigned asInt[2];
double asDouble;
};
int n;
asDouble = (double)k + 0.5;
n = 1054 - (asInt[LE] >> 20); // little endianなら1,big endianなら0
return n;
}
これがうまく理解できません><
優しく解説してくれるエロい人はいませんか?
>>263 指数部を見ると下から何桁まで利用しているかがわかるので、
それを使って先頭に0が何個必要かを求めてる
>>266 - scanf("%*c%c",c);
+ scanf("%*c%c",&c);
宿題は宿題スレへ
269 :
266:2010/05/22(土) 00:32:44
270 :
デフォルトの名無しさん:2010/05/22(土) 06:41:26
はあ・・・
271 :
デフォルトの名無しさん:2010/05/22(土) 12:52:28
プログラミングの本ってさ、サンプルがあって、行ごとに何をやってるかが記載されてるんだよね。
でもいいかえれば 他人が作成したコードを見ることにかわりはないんだから、結局本なんて買わずネットで調査すればいいじゃんかと。
いや、やっぱり商業目的で作られた説明と無償のボランティア的な説明とではそれなりに色々違うと思う
273 :
デフォルトの名無しさん:2010/05/22(土) 15:46:19
C言語で1〜10までの範囲でrand関数の値を所得するにはどうすれば良いですか
rnd = rand(10)
これでいいんでしょうか
すいません。以下のプログラムの最後のwhileのところで実行時エラーになります。
どうなってますか。unsigned charをcharにしたらうまくいったんですがどうなってますか。
{
system("echo 111 > test_1.txt");
unsigned char* p_uc;
p_uc = new unsigned char[10];
FILE* fp_uc;
if((fp_uc = fopen("test_1.txt", "r")) == NULL){
printf("file open error line:%d\n", __LINE__);
exit(0);
}
int i=0;
while((p_uc[i++] = fgetc(fp_uc)) != EOF){ ; }
}
>>274 assert(static_cast<unsigned char>(EOF) != EOF):
>>273 rand() % 10 + 1
(int)((double)rand() * 10 / ((double)RAND_MAX + 1)) + 1
前者の方が速いが、僅かに偏ったり、場合によって周期が短くなったりすることがある
後者の方が遅いが、どんな場合でも安心して使える
>>274 EOF は負の数だから unsigned char に代入した時点で値が変わる。正しく比較できない。
そのため、無限ループになって配列範囲外にアクセスしている。
なるほど。EOFってただの-1だったんですね。勉強になりましたありがとうございました。
とりあえず以下で回避できました。
int temp_c;
while((temp_c = fgetc(fp_uc)) != EOF){
p_uc[i++] = temp_c;
}
280 :
デフォルトの名無しさん:2010/05/22(土) 16:39:11
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d%d" &a, &b);
return 0;
}
これコンパイルできなかったんですが・・・
どこらかどうみても
どこも間違ってるとこないような・・
どこが間違ってるんでしょう?
VSでやっててプロジェクトの作り間違いとかじゃねえの
いいかげん、全角スペースは飽きた
block_cnt[j]=ch.shot_cnt;
**省略**
for(int j=0;j<7;j++){
block_cnt[j]=block_cnt[j]-1*BLOCK_TATE/ch.shot_cnt;
if(block_cnt[j]<=0){
block_cnt[j]=0;
}
}
コンパイルはできました。
BLOCK_TATE は 20 、 ch.shot_cnt は 40 です。
block_cnt[j]はdoubleで宣言したのですが、なぜ block_cnt[j] の値が減らないのかを教えてください。
-1*BLOCK_TATE/ch.shot_cnt を -1 に変えればちゃんと減るのですが・・・。
またできれば対応策もお願いします。
20/40 = 0
286 :
デフォルトの名無しさん:2010/05/22(土) 17:04:19
>>285 280ですがいや意味わかりません・・・
+ -ってなんですか?
この前はscanfで組んだプログラムできたんですが・・
どこが間違ってますか?
>>286 なんで + - しか見ないんだよ。その後ろ見れば気づくだろ。わざとか?
>>276 後者も偏りは出るだろ。
最大値が10の倍数でもないかぎり。
偏りを無くしたかったら振り直し法を使うしかないよ。
んで、Kernighan 先生の本はもう買ったのか?
この本は必須だからな。
まず基礎を固めないと、その上に何を積み重ねても無駄無駄。
290 :
デフォルトの名無しさん:2010/05/22(土) 18:31:37
とりあず
intでperioikoiと perioikoinとperioikoron
を変数名にして
perioikoi = 1
perioikoin =1で
perioikoron = perioikoi+perioikoinを実行したら
4ってなるんですけど何でですか?
292 :
デフォルトの名無しさん:2010/05/22(土) 18:38:54
>>291 頼むから作ってくれ・・・
他のこと指摘されそうで怖い。頼む
>>292 指摘されたら怖いとか、意味がわからん。
問題の原因が知りたいんじゃないのか?
指摘を恐れる者に成長は無い
295 :
デフォルトの名無しさん:2010/05/22(土) 19:02:00
>>293>>294 こですが・・・・
#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoron =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
実行したら4になります
296 :
デフォルトの名無しさん:2010/05/22(土) 19:02:57
間違えた こうです
#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoinn =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
実行したら4になります
何故でしょうか?
試しに誰か作ってください・・・・・・
>>296 おまえそれ実行してないだろ。コンパイルすらとおらねぇよ。
299 :
デフォルトの名無しさん:2010/05/22(土) 19:05:43
また間違えた
間違えた こうです
#include<stdio.h>
int main(void)
}
int perioikoi, perioikoin, perioikoron;
perioikoi = 1;
perioikoin =1;
perioikoron = perioikoi + perioikoin;
printf("%d\n", perioikoron);
return 0;
}
誰かまじで試しにつくって・・・
perioikoiじゃなくても
piru pirumon pirumonia
でもOK
もっと区別のつきやすい変数を使ってくれ