• ベストアンサー

入出力について

プログラミングの初心者ですが、入出力について少し理解できないことがあります。ある参考書で long値の使い方について long lg; とし、 出力する時 printf("%ld\n",lg); とせよ と書いてあったのですが この % の後にある l は一体どうゆう役割を果たしているのでしょうか? また入力について double値の使い方で double db; とし、 scanf("%lf", &db); とせよ と書いてあったのですが、この場合の % の後の l は一体どうゆう役割を果たしているのでしょうか? 説明に不足があればまた足しますのでよろしくお願いします。

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

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

まっとうな資料ならきっちり書いてあるはずですが, printf, scanf 系の書式において, その l は対応する引数が long または double であることを示します. ちなみに printf 系の l は C99 で使えるようになったので, それ以前の規格の処理系だとだめかもしれない.

ganfuji142
質問者

お礼

そういうことだったのですか。 わかりました。ありがとうございました。

その他の回答 (1)

回答No.2

No1の方の回答で出尽くされましたが、 もし%l~の効果を試してみたいなら、 long long llg = とても大きい数(5000000000とか) とし、 printf("%d",llg);とprintf("%ld",llg); などで比較してみてください。

関連するQ&A

  • プログラミング 実数 合計値

    プログラミング 実数 合計値 3つの実数を読み込んで合計を表示するというプログラムのソースについてなんですが #include <stdio.h> int main(void) { double na, nb, nc; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%5.lf", &na); printf("実数:"); scanf("%5.lf", &nb); printf("実数:"); scanf("%5.lf", &nc); printf("合計は%5.lfです。\n", (double)(na + nb + nc); return (0); } でコンパイルしてみたんですが、構文エラーでreturnの前の行で')'が';'の前にありません というのが出てきてコンパイルできないのですが、これはどこが間違ってるんでしょうか?

  • C言語のポインタのプログラムについての質問です。

    C言語のポインタについて質問です。 nこの配列データaを受け取り、それらの値をもとに、2つのデータを引数で受け取って交換する関数void swap(double *a,*b)を用いることにより最終的に降順に並べ替えて出力したのち、それらを平均(average)と標準偏差(standard deviation)を引数で受け渡す関数 void calc_ave_stddev(int n,double a[],double *ave,double*stddev)を利用して出力されるプログラムを教えてほしいです。 main関数内での書式は printf("enter n:"); scanf("%d,&n"); for(i=0;i<n;i++){ printf("enter a[%d]:",i); scanf("%lf"&a[i]); } main関数での結果の出力は、 for(i=0;i<n;i++){ printf("a[%d]=%lf\n",a[i]); } printf("ave=%lf stddev=%lf\n",ave,stddev); です。

  • 配列と反復の組み合わせ、ファイルの入出力

    C言語初心者です。 どうしても分からないので投稿しました。 たとえば、 ==読み込むファイル== x 2 3 5 7 9 ・・・ 17 ==== という、xの値が10通りある読み込むファイルがあるとします。 このファイルを読み込み、y=a*xという関数でそれぞれのxに対するyの値を出力したいのです。またこの時、aの値を1~10と変化させたときのyの値も出力したいのです。 出力ファイルのイメージは、 ==出力ファイル== (a_1,x_1)(a_1,x_2)・・・(a_1,x_10) (a_2,x_1)(a_2,x_2)・・・(a_2,x_10) (a_3,x_1)(a_3,x_2)・・・(a_3,x_10)       ・・・       ・・・       ・・・ (a_9,x_1)(a_9,x_2)・・・(a_9,x_10) (a_10,x_1)(a_10,x_2)・・・(a_10,x_10) です。 反復、ファイル入出力、二次元配列を用いて作るのだと思うのですが、うまく作ることができません。 ファイル入出力などなしで、xの値を一つ指定し、aの値を1~10まで変化させたときのyの値を表示させるプログラムを作ったのですが、これもまだうまく動きません。 ご教授してもらえたらとても助かります。 よろしくお願いします。 #include <stdio.h> void main(){ double y,a,x; int i; printf("x=\n"); scanf("%lf",&x); for(a=0;a<10;a++){ a=a++; y=a*x; printf("y=%lf\n",y); } }

  • プログラミング 実数 合計

    3つの実数を読み込んで合計を表示するというプログラムなんですが、プログラムをコンパイルして3つの実数を入力してくださいと表示させて実数1に1.5、実数2に0.8、実数3に1.0, 合計は3.3です表示させたいのですが #include <stdio.h> int main(void) { double n1,n2,n3; puts("3つの実数を入力してください。"); printf("実数:"); scanf("%lf", &n1); printf("実数:"); scanf("%lf", &n2); printf("実数:"); scanf("%lf", &n3); printf("合計は%5.lfです。\n",(double)(n1 + n2 + n3)); return (0); } でコンパイルしようとすると1つしか実数を入力する所が出てこなくて 数字を入れると合計は.lfですと出てきて実行できないのですが、上のソースのどこか間違ってる所があったら教えてくれませんか?

  • Cプログラミング 初歩

    #include <stdio.h> int main (void){ double num; printf("実数を入力して下さい:"); scanf("%lf",&num); printf("あなたは%fと入力しましたね\n",num); return(0); } のプログラミングがコンパイル出来ません↓ printf("あなたは%fと入力しましたね\n",num); をprintf("%f\n",num);のようにすると上手くいくのですが、 どうしたらコンパイルできるか分かる人はいますか?

  • C++の繰り返し

    たびたび申し訳ありません.C++総和の質問です Microsoft Visual Basic 6.0の質問です. 以下の用に繰り返しの総和計算を書いたのですが,それぞれの総和が計算されず,例えば最もシンプルな総和sumも0となってしまう状態です.(他の総和も全て0になります) 何か間違いなどありますでしょうか? //hello2.cpp #define _COMPLEX_DEFINED #include <iostream> #include <string> #include "complex.h" #include "bessel.h" #include <math.h> #include <cmath> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; const double I0=2829; const double r0=0; const double z=0; const double B1=6.07*pow(10,7); int k; double omega,freq,x; double R,Rk; double lambdag,ag; double lambda1,a1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; double Km,Kn,Kg,am; complex r1,g,S2; complex sigma1,sigma2,sigmag; complex G,P,B,H; complex RR,NI,NI2,NI3,BE; double ANS,sumRIm,sumRRe,sumKm,sum; int x1; double r,r00,r001,r01; double imag(),real(); printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); printf("am範囲"); scanf("%lf",&x1); x=2; freq=pow(10,x); omega=2*pi*freq; sum=0; sumRIm=0; sumRRe=0; sumKm=0; for (int i=1; i<=x1; i++) { sum+=i; am=(double)i; Km=am/p; Kn=am/p2; Kg=am/pg; sigma1=cpow(pow(Km,2)+complex(0,omega/a1),0.5); sigma2=cpow(pow(Kn,2)+complex(0,omega/a2),0.5); sigmag=cpow(pow(Kg,2)+complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); G = (1/(2*(S2+g)))*((S2-g)*(-1+R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(1+R*lambda2*sigma2+S2)); P = (1/(2*(S2+g)))*((S2-g)*(1-R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1-R*lambda2*sigma2+S2)); B = (1/(2*(S2+g)))*((S2-g)*((1-R*lambda2*sigma2)*r1+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1*(1+R*lambda2*sigma2)*r1+S2)); H = ((g+r1)*cexp(sigma1*l1)*G+(1-g)*cexp(-1*B1*l1)*B)/((1-g)*cexp(-1*sigma1*l1)*P+(1+g)*cexp(sigma1*l1)*G); r=0; r00=0; r001=1; r01=0.00005; BE=1; NI= exp(-1*(2*pow(r01,2)/pow(Rk,2)))*j0(Km*r)*r01; NI2=2*pi*r001*j0(Km*r00); NI3=cpow(j1(am),-2); RR= (B1*I0/(2*lambda1*(cpow(sigma1,2)-pow(B1,2))))*2*pow(p,-2)*cpow(BE,-2)*NI*(1/(1-g))*(-2*H+r1+1)*NI2*cexp(sigmag*z); sumKm+= Km; sumRIm+= RR.imag(); sumRRe+= RR.real(); } ANS=-atan((sumRIm/sumRRe)*(180/pi)); printf("%e\n",R*Rk); printf("%e\n",Rk); printf("%e\n",lambda1); printf("%e\n",B1); printf("%e\n",Km); printf("%e\n",sigmag); printf("%e\n",g); printf("%e\n",r1); printf("%e\n",j0(am)); printf("%e\n",G); printf("%e\n",P); printf("%e\n",B); printf("%e\n",H); printf("%e\n",NI3); printf("%e",RR.real()); printf("+"); printf("%e",RR.imag()); printf("i""\n"); printf("%e\n",sumKm); printf("%e\n",sumRRe); printf("%e\n",sum); printf("%e\n",ANS); scanf("%d",&k);// return 0; }

  • C++総和の質問です

    Microsoft Visual Basic 6.0の質問です. 色々試してもうまくいかない箇所があるので質問させていただきます. この式の中で,am=1となっているものをam=1からam=x(xはscanfで入力) とし,最後のRRR上で1からxまでのRRRの総和を計算させることは可能でしょうか? 基本的な総和と違い,RRRより前に計算しているKmやKn上にそれぞれのamを代入し,最終的にRRRの総和を計算するという形にするやりかたがわからない状態です. プログラムが無駄に長くて申し訳ありませんが,わかる方いらっしゃいましたらよろしくお願いいたします. 以下プログラムです //hello2.cpp #define _COMPLEX_DEFINED #include <iostream> #include <string> #include "complex.h" #include "bessel.h" #include <math.h> #include <cmath> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; const double I0=2829; const double r0=0; const double z=0; const double B1=6.07*pow(10,7); int k; double omega,freq,x; double R,Rk; double lambdag,ag; double lambda1,a1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; double Km,Kn,Kg,am; complex r1,g,S2; complex sigma1,sigma2,sigmag; complex G,P,B,H; complex RR,NI,NI2,NI3,BE,RRR; double r,r00,r001,r01; double imag(),real(); printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); x=2; freq=pow(10,x); omega=2*pi*freq; am=1; Km=am/p; Kn=am/p2; Kg=am/pg; sigma1=cpow(pow(Km,2)+complex(0,omega/a1),0.5); sigma2=cpow(pow(Kn,2)+complex(0,omega/a2),0.5); sigmag=cpow(pow(Kg,2)+complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); G = (1/(2*(S2+g)))*((S2-g)*(-1+R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(1+R*lambda2*sigma2+S2)); P = (1/(2*(S2+g)))*((S2-g)*(1-R*lambda2*sigma2+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1-R*lambda2*sigma2+S2)); B = (1/(2*(S2+g)))*((S2-g)*((1-R*lambda2*sigma2)*r1+S2)*cexp(-2*sigma2*l2)-(S2+g)*(-1*(1+R*lambda2*sigma2)*r1+S2)); H = ((g+r1)*cexp(sigma1*l1)*G+(1-g)*cexp(-1*B1*l1)*B)/((1-g)*cexp(-1*sigma1*l1)*P+(1+g)*cexp(sigma1*l1)*G); r=0; r00=0; r001=1; r01=0.00005; BE=1; NI= exp(-1*(2*pow(r01,2)/pow(Rk,2)))*j0(Km*r)*r01; NI2=2*pi*r001*j0(Km*r00); NI3=cpow(j1(am),-2); RR= (B1*I0/(2*lambda1*(cpow(sigma1,2)-pow(B1,2))))*2*pow(p,-2)*cpow(BE,-2)*NI*(1/(1-g))*(-2*H+r1+1)*NI2*cexp(sigmag*z); RRR=-atan(((RR.imag())/(RR.real()))*(180/pi)); printf("%e\n",R*Rk); printf("%e\n",Rk); printf("%e\n",lambda1); printf("%e\n",B1); printf("%e\n",sigma1); printf("%e\n",sigmag); printf("%e\n",g); printf("%e\n",r1); printf("%e\n",j0(am)); printf("%e\n",G); printf("%e\n",P); printf("%e\n",B); printf("%e\n",H); printf("%e\n",NI3); printf("%e",RR.real()); printf("+"); printf("%e",RR.imag()); printf("i""\n"); printf("%e\n",RRR); scanf("%d",&k);// return 0; }

  • C++の質問です

    Microsoft Visual Basic 6.0の質問です.以下のエラーが出るのですがCとC++の言語の影響によるものでしょうか? 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl operator*(class complex,class complex)" (??D@YA?AVcomplex@@V0@0@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl operator/(class complex,class complex)" (??K@YA?AVcomplex@@V0@0@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""class complex __cdecl cpow(class complex,double)" (?cpow@@YA?AVcomplex@@V1@N@Z)" は未解決です 6273次元境界.obj : error LNK2001: 外部シンボル ""public: __thiscall complex::complex(double,double)" (??0complex@@QAE@NN@Z)" は未解決です 元の形です #include <iostream> #include <string> #include "complex.h" #include <math.h> #include <stdio.h> #define RADIAN(ARC) ((ARC) * 3.14159 / 180) using namespace std; int main(void) { const double pi=3.141592654; int k; double omega,freq; double I0,r0,z,R,Rk; double lambdag,ag; double lambda1,a1,B1,l1; double lambda2,a2,l2; double p,p2,pg; double a11,a21,ag1,Rk1,l11,l21,p11,p21; complex r1,g,S2; complex sigma1,sigma2,sigmag; printf("接触熱抵抗"); scanf("%lf",&R); printf("加熱光半径(10^-6)×"); scanf("%lf",&Rk1); Rk=Rk1*pow(10,-6); printf("1層目熱伝導率"); scanf("%lf",&lambda1); printf("1層目温度伝導率(10^-6)×"); scanf("%lf",&a11); a1=a11*pow(10,-6); printf("1層目厚み(10^-6)×"); scanf("%lf",&l11); l1=l11*pow(10,-6); printf("2層目熱伝導率"); scanf("%lf",&lambda2); printf("2層目温度伝導率(10^-6)×"); scanf("%lf",&a21); a2=a21*pow(10,-6); printf("2層目厚み(10^-6)×"); scanf("%lf",&l21); l2=l21*pow(10,-6); printf("バッキング熱伝導率"); scanf("%lf",&lambdag); printf("バッキング温度伝導率(10^-6)×"); scanf("%lf",&ag1); ag=ag1*pow(10,-6); printf("1層目半径境界(10^-6)×"); scanf("%lf",&p11); p=p11*pow(10,-6); printf("2層目半径境界(10^-6)×"); scanf("%lf",&p21); p2=p21*pow(10,-6); printf("バッキング半径境界"); scanf("%lf",&pg); I0=2829; r0=0; z=0; B1=6.07*pow(10,7); freq=100; omega=2*pi*freq; sigma1=cpow(complex(0,omega/a1),0.5); sigma2=cpow(complex(0,omega/a2),0.5); sigmag=cpow(complex(0,omega/ag),0.5); r1=B1/sigma1; g=(lambdag*sigmag)/(lambda1*sigma1); S2=(lambda2*sigma2)/(lambda1*sigma1); printf("%f\n",R*Rk); printf("%f\n",Rk); printf("%f\n",lambda1); printf("%f\n",a1); printf("%f\n",l1); printf("%f\n",B1); scanf("%d",&k);// return 0; } そしてcomplex.hです #include <iostream.h> #ifndef __COMPLEX_H__ #define __COMPLEX_H__ class complex{ double r,i,p,w; public: complex(double a=0,double b=0); double real(); double imag(); double omega(); double phai(); friend complex cpow(complex a,double b); friend complex cexp(complex a); friend complex operator +(complex a, complex b); friend complex operator -(complex a, complex b); friend complex operator *(complex a, complex b); friend complex operator /(complex a, complex b); friend int operator ==(complex a, complex b); friend ostream& operator <<(ostream& os, complex& c); friend istream& operator >>(istream& is, complex& c); }; #endif です. extern "C"を使えばよいのでしょうか?(やりかたが間違っているのか,うまくできません) よろしくお願いいたします.

  • プログラム改良 求む

    こんにちは 以下の摂氏を華氏に変換するプログラミングを、摂氏が入力された場合はそのまま出力し、華氏が入力された場合は摂氏に変換してから出力するようなプログラミングに改良したいです。 #include <stdio.h> int main() { printf("摂氏を華氏に変換します。変換したい温度を摂氏で入力してください。\n"); double c, f; scanf("%lf",&c); f = (c * 9 / 5) + 32; printf("%lfºFです。", f);    return 0; }  今のところ、プログラムにどのように摂氏を華氏の違いを認識させればいいかがわかりません。分かりやすくコードを添えていただけるとさらに助かります。お願いします。

  • ax^2+bx+c=0の解を求めたいのですが・・(初歩的です)

    タイトル通り、a、b、cを入力させて、ax^2+bx+c=0の解xを求めたいのですが、結果をどう求めればいいのか、実解・虚数解・重解の場合をどうしたらいいのか、の2点がよくわかりません。 #include<math.h> #include<stdio.h> double sqrt(double a,double b,double c) { return (b*b-4*a*c); } main(void) { double a,b,c,sqrt,ans; do{ printf("ax^2 + bx +c = 0 の解 x を求めます。\n a,b,cを入力してください。\n"); printf("a : "); scanf("%lf",&a); printf("\nb : "); scanf("%lf",&b); printf("\nc : "); scanf("%lf",&c); if(a = 0){ printf("a は0以外を入力してください。\n"); } }while(a = 0); ans = (-b+dist(a,b,c))/(2*a); printf("%lf", ans); printf("\n"); return(0); } 他にも多々ダメな部分があると思いますがご指摘・アドバイス等いただけたらと思います。よろしくお願いします。

専門家に質問してみよう