C言語データの入力と書き込みについて

このQ&Aのポイント
  • C言語において、キーボードで入力された数字のデータを特定のアドレスに書き込む方法について学習しています。
  • 指定したアドレスに書き込むためには、アドレスを定義し、そのアドレスにデータを書き込む関数を使用します。
  • 質問者は、アドレスを定義したあとにscanfの結果をアドレスに書き込むことができるかどうかを知りたいと述べています。
回答を見る
  • ベストアンサー

C言語 データ

今キーボードで入力された数字のデータを、あるアドレスのデータに書き込むという学習をしています。 #define Dout 035E ~~~~ printf("KEY INPUT\n"); scanf("%d",&c); outp(Dout,0xc); printf("035E:%x\n",Dout); 035Eというアドレスを定義したあとに、この文面ではDoutにscanfで入力された 数字は、outp(Dout,0xc);この中のcにデータとして書き込むのは出来ないのでしょうか? 例えば、0が入力されれば0を書き込み、1が入力されれば1を書き込むというプログラム にしたいと思っています。 教えていただけないでしょうか?

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

>scanf("%d",&c); >outp(Dout,0xc); outp()という関数の仕様がわからないですが、 scanf()で読み取った変数cと、 outp()の第2引数0xcとは、 全く無関係です。 0xc というのは、十進数でいうところの12という即値であり、 変数cを十六進に直したもの「ではありません」。

関連するQ&A

  • C言語で計算が合いません(初心者)

    C言語で計算が合いません(初心者) 簡単な計算のプログミングをしているのですが 計算が合わなくて困っています。 整数型変数aと実数型変数bを定義 整数型変数cとdを定義して、c=0.5*a*b、d=a/2*b 実数型変数eとfを定義して、e=0.5*a*b、f=a/2*b という内容のプログラムを作ったのですが a=7,b=2.4を代入してみた結果 ---------------------------- Input a>>7 Input b>>2.4 8 7 8.400000 7.200000 ---------------------------- となりました どこが間違っているのでしょう? 答えは8.4でcが8なのは有効数字のためだと思いますが dとeで答えが全く違う理由が分かりません。 下に私が書いたものを貼っています。 ---------------------------- #include<stdio.h> int main(void){ int a,c,d; double b,e,f,ans; printf("Input a>>"); scanf("%d",&a); printf("Input b>>"); scanf("%lf",&b); c=0.5*a*b; printf("%d\n",c); d=a/2*b; printf("%d\n",d); e=0.5*a*b; printf("%lf\n",e); f=a/2*b; printf("%lf\n",f); return 0; } ---------------------------- よろしくお願いします。

  • c言語です

    c言語初心者です。今大学の課題でc言語のプログラムをかいているのですが、うまくいかないので助けて欲しいです。以下のようなプログラムで調和平均の値を出したいのですがなぜか表示されません。infと表示されてしまいます。あと調和平均とはn/(1/d1+1/d2+1/d3+.........+1/dn)の値です。ここでd1~dnは入力された数のことです。なので0が入力された場合は値を返さないようにしたいです。   どこをどのように直せばいいのか教えてください。よろしくお願いします。 #include <stdio.h> #include<math.h> #define M 1000 int main (int argc, const char * argv[]) { // insert code here... float d[M]; double e[M]; double wa=0.0,av,bun=0,kika=1,tyowa=0; /*avはaverageを,bunは分散を意味します*/ int i=0,j=0; printf("複数の数字を入力してください\n"); printf("数字入力を終了するときはnull文字を入力してください\n"); printf("数字以外が入力されたら\n"); printf("それまでの数字の計算結果を表します\n"); /*数字を入力、和を求める*/ while (scanf("%f",&d[i])!='\0') { wa=wa+d[i]; i++; } if (i!=0) { printf("算術平均は%fです\n",wa/i); av=wa/i; for (j=0; j<i; j++) { kika=kika*d[j]; } printf("幾何平均は%fです\n",pow(kika,1./i)); for (j=0; j<i; j++) { if (d[j]=0) { printf("調和平均は出せません\n"); } else e[j]=1/d[j]; } for (j=0; j<i; j++) { tyowa=tyowa+e[j]; } printf("調和平均は%fです\n",e[1]); for (j=0; j<i; j++) { bun=bun+(d[j]-av)*(d[j]-av); } printf("分散の値は%fです\n",bun/i); } else { printf("数字を入力してください\n"); } return 0; }

  • C言語 構造体の並び替え 

    #include<stdio.h> typedef struct{ char mozi[10]; char namae[30]; }PE; void input_profile(PE *p,int *a); void printf_profile(PE *p,int *a); int main(void) { int i=0; PE c[999]; input_profile(c,&i); return 0; } void input_profile(PE *p,int *a){ int c,b; for(b=0;999>b;b++) { printf("名前を入力\n"); scanf("%s",(p+b)->namae); printf("文字を入力\n"); scanf("%s",(p+b)->mozi); printf("入力を終えるなら0を入力してください\n続けるなら、それ以外の数字を入力してください\n"); scanf("%d",&c); if(c==0)break; } b++; *a=b; printf_profile(p,a); } void printf_profile(PE *p,int *a) { int b; for(b=0;*a>b;b++) { printf("NO%d\n",b+1); printf("文字%s\n",(p+b)->mozi); printf("名前%s\n",(p+b)->namae); } } このプログラムを 自分で関数を作って データ一覧をmoziのアルファベット順に表示するように書きなおしたいんですけど どうなるのでしょうか? どうか教えてください

  • C言語 関数化の仕方について

    こんにちは。プログラムの関数化の方法についてお願いがあり投稿いたしました。プログラムの関数化というものを行いたいのですが方法が分からないので、以下のプログラムを関数化していただきたいのです。 #include <stdio.h> int main() { printf("摂氏と華氏を相互変換します。変換したい温度を入力してください。\n"); printf("入力例:32F, 100C, etc.数値と単位の間に空白は不要です。\n"); double x, xc; char u; scanf("%lf%c",&x,&u); if (u=='C') { xc = (x * 9 / 5) + 32; printf("%lf degCは%lf degFです。\n", x, xc); } else if (u=='F') { xc = (x - 32) * 5 / 9; printf("%lf degFは%lf degCです。\n", x, xc); } else { printf("書式が誤っています。\n"); } return 0; } コードを添えていただけるとさらに分かりやすくて助かります。お手数ですがよろしくお願いいたします。

  • C言語について

    「キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作れ。」という問題で私は、 #include <stdio.h> void main(void) { float A; float a,b,c,d,e,f,g,h,i,j; printf("実数を入力してください:"); scanf("%f",&a); scanf("%f",&b); scanf("%f",&c); scanf("%f",&d); scanf("%f",&e); scanf("%f",&f); scanf("%f",&g); scanf("%f",&h); scanf("%f",&i); scanf("%f",&j); A=(a+b+c+d+e+f+g+h+i+j)/10; printf("平均は%fです.\n",A); } と考えたのですが、もっとすっきりとしたプログラムはないのでしょうか?もっとシンプルにしたいのです。教えて下さい。よろしくお願いします。

  • C言語初心者です。

    #include <stdio.h> int main() { int b[100]; int i, n; int a, r, data; int count=0; printf("Please input two integers:"); fflush(0); scanf("%d %d", &a, &r); if(a<=0 || r<=1){ printf("Error\n"); } else{ for(n=0; b[n]<=80.0; n++){ if(n==0){ b[0]=0; count++; } else { for(i=0; i<=n-1; i++){ data*=r; } b[n]=a*data; printf("%d ", b[n]); count++; } } printf("\n"); for(; count>0; count--){ printf("%d ", b[count]); } } return 0; } windows8でeclipseを使ってC言語を書いてます。 eclipse上だと何もエラーが表示されてないのですが、実行し、 Please input two integers: と表示された後、適当な数字2つを入力しても何も反応しません。 稚拙な質問ですいません。どなたか原因を教えてください。

  • c言語のプログラムについて

    今年からC言語を始めた大学1年生です。レポートで四則計算を行うプログラムを6/19までに作らないといけないです。使えるのは今までに習った選択型、反復型、関数scanfです。このプログラムの留意点は次の4つです。 1.使う演算を選択してもらう   例えば   どんな演算をしますか? 1:+,2:-,3:*,4:/ (選択) 2.演算を行う数値を入力してもらう   例えば   a + b の計算をします。aを入力してください。 3.演算結果を表示する   ○+○の答えは ○です 4.計算終了か、それともほかの演算を行うか 決める   0:計算終了 1:他の計算を行う を選択してください  以下のプログラムはこのことを留意してプログラムをつくりました。どこがおかしいのでしょうか。 #include<stdio.h> main() { short a,b,m,n; long c,d,e,f; c = a + b; d = a - b; e = a * b; f = a / b; m = 1; printf("整数を入力してください:"); scanf("%d",&a); printf("どんな演算をしますか?:"); printf("1: +,2: -,3: ×,4: ÷ :"); scanf("%d",&n); while(m=1){ if(n<=4){ while(m=1){ switch (n<=4){ case 1: printf("整数を入力してください:"); scanf("%d",&b); printf("%d + %d = %d \n",a,b,c); break; case 2: printf("整数を入力してください:"); scanf("%d",&b); printf("%d - %d = %d \n",a,b,d); break; case 3: printf("整数を入力してください:"); scanf("%d",&b); printf("%d × %d = %d \n",a,b,e); break; case 4: printf("整数を入力してください:"); scanf("%d",&b); printf("%d ÷ %d = %d \n",a,b,f); break; } } } else { printf("計算できません。"); printf("演算をやり直してください。\n:"); } } printf("計算を終了しますか、それとも他の計算を行いますか?:"); printf("0:計算終了,1:他の計算を行う:"); scanf("%d",&m); printf("計算を終了します。\n"); } 提出期限があるのでなるべく早めのご回答待ってます。生意気言ってすいません。

  • C言語で連立一次方程式

    C言語で連立一次方程式 /* 連立一次方程式 a*x + b*y = e c*x + d*y = f の解を求めるプログラムを作成したい。 a,b,c,d,e,f をキーボード入力させる ことで、 行列 [a b c d] の逆行列、及び、連立方程式の解( x= , y= )を求めたい。 なお、a b c d の値によっては、逆行列を求めることが 出来ません。その時は、 【解を求めることはできません】 と表示してプログラムを終了するようにして下さい。 (注) [a,b,c,d,e,f]を 2次元配列 ma[2][3]とする. [逆行列[a,b,c,d]と解x,y]を 2次元配列 mb[2][3]とする. ma[][] の値をmain関数内でキーボード入力する mb[][] の値は,mat_keisan関数内で計算 mb[][] の値をmain関数内で表示 関数 mat_keisan の戻り値として,「解」が求まる方程式か どうかを知らせる「int 型のフラグ(旗)」として用いるとよい. */ #include<stdio.h> int mat_keisan(int ma , int mb); int main(void) { int inverse; double ma[2][3]; double mb[2][3]={0}; printf("連立一次方程式の計算\n"); printf("a * x + b * y= e\n"); printf("c * x + d * y= f\n"); printf("Input a :"); scanf("%lf",&ma[1][1]); printf("Input b :"); scanf("%lf",&ma[1][2]); printf("Input c :"); scanf("%lf",&ma[1][3]); printf("Input d :"); scanf("%lf",&ma[2][1]); printf("Input e :"); scanf("%lf",&ma[2][2]); printf("Input f :"); scanf("%lf",&ma[2][3]); printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[1][1],ma[1][2],ma[1][3]); printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[2][1],ma[2][2],ma[2][3]); inverse=mat_keisan(ma,mb); if(inverse==1) printf("計算できません\n"); else{ printf("逆行列\n"); printf("%4.2f %4.2f\n", mb[1][1],mb[1][2]); printf("%4.2f %4.2f\n", mb[2][1],mb[2][2]); printf("解\n"); printf("x=%4.2f\n",mb[1][3]); printf("y=%4.2f\n",mb[3][3]); } return (0); } /* 配列の足し算 */ int mat_keisan(int ma ,int mb ) { int x,y,z;// 1/ma[1][1]*mb[2][2]-ma[1][2]*mb[2][2]; //逆行列と解を求めるプログラムを作成する。 //そしてその値をmb[][] に入力する。 return(#######); } 関数内が手も足もでません; 他のサイトを調べてみたのですが逆行列を求めるプログラムがよくわかりません; >int mat_keisan(int ma ,int mb ) は、あってないかもです; それとinverseの意味がわかりません; ヒントや、解説を よろしくお願いします;。

  • c言語

    #include<stdio.h> #include<conio.h> void main() { int i=1,sum=0; char c=\'m\'; while(c!=\'e\')//eでない限りwhileループを実行する { sum=sum+i; printf(\"\\n1 kara %d madewo tasuto %d desu.\\n\",i,sum); i++; printf(\"nanikakeywo oshitekudasai.owaru tokiha \'e\'\\n\"); c=getch(); } printf(\"loopwo nukemashita\\n\"); getch(); } while(c!=\'e\')をwhile(c>0)にして実行したい場合はcharをintにかえて、scanfを使わなければならないのはわかりますが、どこを変えればよいか分かりません。ちなみに、while(c>0)に変えた場合に、正の数を入力した後に、「次の数を入力してください」という文を表示してからくりかえす方法をおしえてください。

  • C言語について

    いつもお世話になっています。 以下のソースを分割コンパルをしたいのですが・・・コンパイルがとおりません。 環境としては、Visual Studio 2005 です。 ヘッダファイルは、 /* People.h */ #include <stdio.h> #include <string.h> typedef struct { char name[256]; int age; int sex; } People; /* 個人データを入力する */ extern void InputPeople(People *data); /* 個人データを表示する */ extern void ShowPeople(People data); で、 /* People.c */ #include "People.h" void InputPeople(People *data) { /* 中身は同じなので省略 */ printf("名前:"); scanf("%s",data->name); printf("年齢:"); scanf("%d",&data->age); printf("性別(1-男性、2-女性):"); scanf("%d",&data->sex); printf("\n"); } void ShowPeople(People data) { /* 中身は同じなので省略 */ char sex[16]; printf("名前:%s\n",data.name); printf("年齢:%d\n",data.age); if (data.sex == 1) { strcpy(sex,"男性"); } else { strcpy(sex,"女性"); } printf("性別:%s\n",sex); printf("\n"); } どこがおかしいのでしょうか?? あと、コマンドのところでは、 C:\ > ←のあとは、普通にcl People.cとすればいいのでしょうか?