• ベストアンサー

値を変数に代入してprintfで表示しようとしてもうまくいきません

値を変数に代入して、printfで表示しようとしてもうまくいきません。 ソースのどこが悪いか教えていただけないでしょうか? 変数の値を1個ずつ表示する場合は、正常になります。 問題は、1行で表示する場合に1個目の値は出るのですが正常な表示にはなりません。 //ソース開始 #include <stdio.h> #include <windows.h> int main() { LARGE_INTEGER i64,h64; LONGLONG work,h,m,s; QueryPerformanceCounter(&i64); QueryPerformanceFrequency(&h64); //起動時間をミリ秒取得 work = i64.QuadPart*1000 / h64.QuadPart; //時間をhに入れる h = work / 1000 / 3600; //分をmに入れる m = (work / 1000 - h * 3600) / 60; //秒をsに入れる s = work / 1000 - h * 3600 - m * 60; //表示 printf("%d時間%02d分%02d秒\n",h,m,s); printf("%d時間\n",h); printf("%d分\n",m); printf("%d秒\n",s); printf("%d秒\n",work); return 0; } //ソースここまで //実行結果 289時間00分55秒 289時間 55分 54秒 1043754590秒 続行するには何かキーを押してください . . . //理想の表示結果 1行目が以下のようになってほしい 289時間55分54秒

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

可変長引数の関数であるprintf関数では書式指定文字の指定がとても重要になります。 渡された引数のサイズをその書式指定文字から決めますので、 適切に指定しないと引数の値を正しく認識できません。 printf 関数と wprintf 関数の書式指定フィールド http://msdn.microsoft.com/ja-jp/library/56e442dc.aspx から サイズと距離の指定 http://msdn.microsoft.com/ja-jp/library/tcxf1dw6.aspx より LONGLOGがlong longであるのであれば、 >printf("%d時間%02d分%02d秒\n",h,m,s); は printf("%lld時間%02lld分%02lld秒\n",h,m,s); としなければなりません。

googleoooo
質問者

お礼

回答ありがとうございます。 解決しました。 本当にありがとうございました

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

出力する値の型と書式はあってますか?

googleoooo
質問者

お礼

回答ありがとうございます 調べてみます

関連するQ&A

  • printfを代入する?

    #include <stdio.h> int main(void) { int kaerichi,nyuuryokumoji; char moji[40]; printf("\n数字を入力してください:"); scanf("%d",&nyuuryokumoji); kaerichi=printf("%d",nyuuryokumoji); printf("\n入力数字の桁数は%dです\n",kaerichi); printf("\n文字を入力してください:"); scanf("%s",&moji); kaerichi=printf("%s",moji); printf("\n入力された文字は%dです\n",kaerichi); return(0); } このプログラムでkaerichi=print("d",nyuuryokumoji); とありますがどういう意味でしょうか? 変数に数字などを入れるのはわかるのですが printfをいれるというのがあまりよくわかりません あとどうして桁数がでるのでしょうか?

  • プログラミングの変数について質問です。

    プログラミングの変数について質問です。 次のプログラミングは自分で書いたプログラムの一部です。 void inputmonster(int x[][3], struct monster monster) { int i, s, t, m, n; for(t = 0; t < 2; t++){ s = 0; while (s < 1){ printf("player%dは好きなモンスターを3つ選んでください\n\n", t+1); for (i = 0; i<3; i++){ printf("%d体目を選んでください。\n\n", i+1); for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name); scanf("%d", &x[t][i]); printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name); } printf("これでよろしいですか?\n"); for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].name); printf("1、はい 2、いいえ\n"); scanf("%d", &n); if(n == 1) s = 1; else s = 0; } } } これをコンパイルすると次のようなエラーが表示されます。 monsterbattle.c: 関数 ‘inputmonster’ 内: monsterbattle.c:497:63: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません for(m = 0; m < 5; m++) printf("%d, %s\n", m+1, monster[m].name); ^ monsterbattle.c:499:45: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません printf("%d体目 : %s\n\n", i+1, monster[x[t][i]-1].name); ^ monsterbattle.c:503:68: エラー: 添字が付けられた値が、配列、ポインタまたはベクト ルではありません for(i = 0; i<3; i++) printf("%d体目 : %s ", i+1, monster[x[t][i]-1].na me); どのように改変すればこのようなエラーを表示しないようにできるのでしょうか? 基本的な質問ではあると思いますが、是非教えていただけるとありがたいです。 よろしくお願いします。

  • 変数について(足し算・引き算)

    #include<stdio.h> main () { int i ; int j ; printf("第1の引数は?\n"); scanf("%d" , &i); printf("%d\n" , i); printf("第2の引数は?\n"); scanf("%d" , &j); printf("%d\n" , j); printf("和は、%d\n" , i+j); printf("差は、%d\n" , i-j); printf("積は、%d\n" , i*j); printf("商は、%d\n" , i/j); return; } これを実行すると(iを20 jを10)としたときに 和は、30 差は、10 積は、200 商は、2 と表示されます。 しかし、このようにプログラミングすると 足し算や、引き算の値が変になります。 #include<stdio.h> main () { int i ; int j ; int tashizann = i + j; int hikizann = i - j; int kakezann = i * j; int warizann = i / j; printf("第1の引数は?\n"); scanf("%d" , &i); printf("%d\n" , i); printf("第2の引数は?\n"); scanf("%d" , &j); printf("%d\n" , j); printf("和は、%d\n" , tashizann); printf("差は、%d\n" , hikizann); printf("積は、%d\n" , kakezann); printf("商は、%d\n" , warizann); return; } これを実行すると(iを20 jを10)としたときに 和は、257 差は、-255 積は、256 商は、0 と表示されます。 変数で足し算や引き算を設定したものを引数として 使うと、値がおかしくなるのかを教えて頂けませんか。

  • printfするのとしないのとで実行結果が異なる

    現在、ようやくC言語にも慣れてきてソースが自力で書けるようになってきた者です。ところが、ちょっとした問題に悩んでいます。 当該ソースは以下のとおりです。 #include<stdio.h> int main(void){ #define NINZU 5 int i,j,k,temp,va[NINZU]; for(i=0;i<NINZU;i++){ printf("va[%d]=",i); scanf("%d",&va[i]); } for(j=0;j<NINZU;j++){ for(k=0;k<NINZU;k++){ if(va[k]<va[(k+1)]){ printf("比較材料 %d\n",va[k]); printf("比較相手 %d\n",va[(k+1)]); temp=va[k]; va[k]=va[(k+1)]; va[(k+1)]=temp; } } } printf("1番の人 : %d\n",va[0]); printf("2番の人 : %d\n",va[1]); return 0; } 簡単なソースで、入力された5個の数値を並び替え1位と2位を表示するというものなのですが、実行結果が、「比較材料・比較相手」というprintfを外すと、「1番の人」の表示がどんな値を入力しても1245056になってしまいます。 printfが入っていれば正常に表示されるのですが… 大至急、知りたいです!!!

  • printf、最大値の出し方

    3つの整数を入力し、どれが最大値かを判別するプログラムを作りたいです。 #include<stdio.h> main() { int i, x, max; max = 0; i = 1; while(i <= 3) { printf("整数:"); scanf("%d",&x); if (x > max) { max = x; } i++; } printf("最も大きい整数は%d\n", max); } とすると 整数:と3回表示されますが、これを一つ目の整数:、二つ目の整数:3つ目の整数:と表示されるようなプログラムにするにはどうしたらよいでしょうか。

  • 複素変数に値が正しく代入されない

    複素変数を使ったプログラムを作るために、 まず複素変数を作成して値を表示するだけのプログラムを作ったのですが、 虚数部分に代入されるはずの値が実数部分に表示され、 虚数部分には0が表示されてしまいます。 書いたプログラムは #include<stdio.h> #include<complex.h> int main(void){ complex<double> a=(1.2,2.3); printf("%g %gi\n",real(a),imag(a)); } 結果は 2.3 0i でした。 どこで書き方を間違えているのでしょうか。 cファイルだとcomplex.hをインクルードしようとすると stdcomp.hでエラーが出るのでcppファイルにしています。 コンパイラはBorland C++ Compiler 5.5を使っています。

  • printfについて

    他サイトにて非常に興味の有るコードがあったのですが、そのサイトは訳合って見れなくなってしまったのでこちらで聞かせてください。 下記のprintfの中の、%.*sはどう解釈したら良いのですか? % . * s それぞれどういう意味が有るのですか? 始めて見るパターンなので分かりません。 #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(void) { char a[] = "あいaう"; char *p; int len; setlocale(LC_CTYPE, ""); for (p = a; *p; p += len) { len = mblen(p, MB_CUR_MAX if (len <= 0) break; printf("%d: %.*s\n", len, len, p); } return 0; }

  • ディスクの空き容量を得たい

    現在ディスクの空き容量を得るプログラムを書いている のですが #include <windows.h> #include <stdio.h> void main() { ULARGE_INTEGER h1; ULARGE_INTEGER h2; ULARGE_INTEGER h3; GetDiskFreeSpaceEx( NULL, &h1, &h2, &h3 ); printf( "h1.QuadPart: %d\n", h1.QuadPart ); } としたところ 画像のようにプラスの値が表示できないのです printf の引数の %d でULARGE_INTEGER の値を表示 できるのでしょうか? それともどこかが間違ってるのでしょうか?

  • ポインタ変数のサイズ

     いろいろC言語のことを知りたくて、次のソースを作って動かしてみました。 ★ソース(□はタブ) ◆◆◆◆◆ #include <stdio.h> #include <stdlib.h> int main(void) { □char *s1; □int *s2; □ □s1 = (char *)malloc(1000); □s2 = (int *)malloc(1000); □ □printf("sizeof s1 = %d\n", sizeof s1); □printf("sizeof s2 = %d\n", sizeof s2); □ □printf("sizeof *s1 = %d\n", sizeof *s1); □printf("sizeof *s2 = %d\n", sizeof *s2); □ □printf("s1 = %d\n", s1); □printf("s2 = %d\n", s2); □ □printf("*s1 = %d\n", *s1); □printf("*s2 = %d\n", *s2); □ □return EXIT_SUCCESS; } ◆◆◆◆◆ ★実行結果1 ◆◆◆◆◆ sizeof s1 = 4 sizeof s2 = 4 sizeof *s1 = 1 sizeof *s2 = 4 s1 = 1323000 s2 = 1324008 *s1 = -60 *s2 = 1310916 ◆◆◆◆◆ ★実行結果2 ◆◆◆◆◆ sizeof s1 = 4 sizeof s2 = 4 sizeof *s1 = 1 sizeof *s2 = 4 s1 = 11087864 s2 = 11088872 *s1 = -60 *s2 = 11075780 ◆◆◆◆◆ ★実行結果3 ◆◆◆◆◆ sizeof s1 = 4 sizeof s2 = 4 sizeof *s1 = 1 sizeof *s2 = 4 s1 = 1519608 s2 = 1520616 *s1 = -60 *s2 = 1507524 ◆◆◆◆◆  OSはWindows Vista、コンパイラはMS Visual Studio 2010 コマンドプロンプトです。次の疑問についてご教授頂きたく、お願い致します。 (1)“sizeof s1”、“sizeof s2”の値が共に4となるのはなぜか。  char型へのポインタ、int型へのポインタとして宣言したs1、s2のサイズが同じ4になる理由が、どうしても分かりません。 (動かす前の予想は、でたらめな値になるかと思っていましたが) (2)“s1”、“s2”、“*s2”の値が毎回でたらめな値になったのに対して、“*s1”の値が毎回“-60”になったのはなぜか。  ポインタでつまずいており、いろいろ実験して体で理解したいと思っています。どうぞよしくお願い致します。

  • printf文で変数のアドレスを表示することはできますか?

    いま、H8S2368でプログラミングを行っていて、変数に入れたデータをprintf文でシリアルで出力して確認したいと思い、 BYTE cur; long addr; cur = TMR1.TCSR.BYTE; addr = (long)&cur; printf("data:%X add:%X\n\r",cur,addr); このようにプログラムしました。 curに入ったデータはH8S2368マイコンの0xFFFFB3番地のTCSR_1というアドレスなので、一応そのアドレス番地の値も表示したいと思い設定したのですが、 ”data:C0 add:FF” という表示が出てきます。 アドレスが0xFFFFB3と出てこないのはなぜなのでしょうか?