12/09/10 01:45:19.08
num[k]とnum[i]の数値の交換をするためにビット演算を使ったら、なぜか上手いこと動かない。
どこに原因が有るのか?
int i,j,k,temp;
int *num;
/*numの値の取得と幾つかの処理*/
num[k] ^= num[i];
num[i] ^= num[k];
num[k] ^= num[i];
この部分が
temp=num[k];
num[k]=num[i];
num[i]=temp;
だと普通に動く。
環境は
OS:Linux
コンパイラ:gcc 4.7
14: ◆QZaw55cn4c
12/09/10 01:55:06.23
>>13
URLリンク(codepad.org)
URLリンク(codepad.org)
しかし
URLリンク(codepad.org)
k == i のときにうまくいっていないんじゃない?
15:デフォルトの名無しさん
12/09/10 02:08:33.19
>>14
k == i になる可能性を考えていなかった。
if(num[k]^num[i])
{
num[i]^=num[k];
num[k]^=num[i];
num[i]^=num[k];
}
こうしたら上手いこと動いた。
16:デフォルトの名無しさん
12/09/10 02:29:30.82
printfのメッセージを外部ファイル化したいのですが、タブや改行などの書式解釈が上手くいきません。
自前で\nを0x0aなどに置換しないとダメなのでしょうか?
--formatText.txt--
\\t[\t]\\t[\t]%%d[%d]\\n\n(ここでEOF)
--main.c--
#include <stdio.h>
int main()
{
FILE *fp;
char szBuf[256];
if(NULL == (fp = fopen("formatText.txt", "r")) ){
printf("open error\n");
return -1;
}
printf("希望");
strcpy(szBuf, "\\t[\t]\\t[\t]%%d[%d]\\n\n");
printf("<<<");
printf(szBuf, 999);
printf(">>>\n");
printf("現実");
fgets(szBuf, 256, fp);
printf("<<<");
printf(szBuf, 999);
printf(">>>\n");
return 0;
}
--実行結果--
希望<<<\t[ ]\t[ ]%d[999]\n
>>>
現実<<<\\t[\t]\\t[\t]%d[999]\\n\n>>>
17:デフォルトの名無しさん
12/09/10 02:30:04.48
質問者です
URLリンク(detail.chiebukuro.yahoo.co.jp)
どなたか教えてください。
18: ◆QZaw55cn4c
12/09/10 02:38:42.78
>>16
printf() の実行時にはあくまでも書式指定のうち % がからむものしか解釈しない。
\nとか\\ とかは、コンパイル時に解釈されるものだ。
自前で置換するしかないでしょうね。それか、自前で \x を展開するルーチンを書くか。
19:デフォルトの名無しさん
12/09/10 03:13:02.52
>>16
printfのメッセージと引数は蜜結合しているので、分離することは良くない。
クラッシュするプログラムが簡単に出来あがるので、設計をやりなおすべき。
Qzとかいうクズのいう事は信用しないように。