macでC言語を扱う方法とは?

このQ&Aのポイント
  • macに乗り換えたが、C言語の環境を整える必要がある
  • Xcodeをインストールしてhello worldまでは表示できたが、switch文でエラーが発生
  • キーボードから入力した文字が反映されない問題が発生している
回答を見る
  • ベストアンサー

mac(OS X lion)でのC言語

先日、今まで使っていたwindows7からmacに乗り換えました。 初macなのでいろいろわからないことだらけで手探りなのですが、 学校のレポートの関係でC言語を扱える環境にしなくてはいけません。 Xcodeをインストールし、とりあえずhello worldまでは表示できたのですが windows時代から使っていた教科書を参照して、以下のswitch文を作りました。 #include <stdio.h> int main(void) { int res; printf("整数を入力してください"); scanf("%d",&res); switch(res){ case1: printf("1が入力されました"); break; case2: printf("2が入力されました"); break; default: printf("1か2を入力してください"); break; } return 1; } hello worldを表示させた方法と同じ方法でコンパイルすると、以下の文が出ます。 整数を入力してください¥n1 1か2を入力してください¥n 1というのは自分がキーボードから入力した文字です。 なぜ、switch文が反映されないのでしょうか?どのような措置が必要なのでしょうか。 教えてください。 hello worldを表示させるまでに参考にしたサイトは以下のサイトです。http://kawairi.jp/weblog/vita/201104062128

  • Mac
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

caseと数字の間に case 1: case 2: のようにスペースを入れると正常に動きますが Linuxのgccもスペースが無いと正常に動きません。

YORUIROGENSOU
質問者

お礼

なるほど!先ほど訂正したら動きました! ご教授いただきありがとうございました。

関連するQ&A

  • C言語、成績は4194432?

    いつも大変お世話になり誠にありがとうございます。 標記の件。 おかしな実行結果になりました。 どうしてでしょうか? ご回答の程宜しくお願い申し上げます。       記 コード #include <stdio.h> int main(void) { int res; printf("成績を入力してください。\n"); scanf("%d", &res); printf("成績は%dです。\n", res); switch(res){ case 1: printf("もっとがんばりましょう。\n"); break; case 2: printf("もう少しがんばりましょう。\n"); break; case 3: printf("さらに上をめざしましょう。\n"); break; case 4: printf("たいへんよくできました。\n"); break; case 5: printf("たいへん優秀です。\n"); break; } return 0; } 実行結果 C:\MinGW>test20.exe 成績を入力してください。 A 成績は4194432です。 C:\MinGW>test20.exe 成績を入力してください。 b 成績は4194432です。 C:\MinGW>test20.exe 成績を入力してください。 v 成績は4194432です。 度々申し訳ございません。 ご回答の程宜しくお願い申し上げます。

  • C言語での数字の花形表示

    数字を読み込んで、それを花形を使った文字で表示するプログラムを書いたのですが、自分の書いたプログラムだと、読み込む数字の最初、または最後に0がくるとそれは表示してくれません・・・。 tmp-=top*s2としているから当たり前っちゃあ当たり前なんですが・・・。 そこでこのプログラムをどのように変更したら最初と最後に0を含んでいても表示できるようになるでしょうか?? やはり根本から作り直さなければいけないんでしょうか・・・。 /* 読み込んだ整数を*で表示 */ #include<stdio.h> int main(void) { int no; int dig = 0; int top, tmp, i; int s=1, s2; printf("整数を入力してください:"); scanf("%d", &no); tmp = no; while (tmp > 0) { /* noの桁数を求める */ tmp /= 10; dig++; } for (i = 0; i < (dig-1); i++) s *= 10; tmp = no; s2 = s; do { top = tmp / s2; /* tmpの一番上の桁の数字をtopへ */ switch (top) { case 0 : printf(" ****"); break; case 1 : printf(" *"); break; case 2 : printf(" ****"); break; case 3 : printf(" ****"); break; case 4 : printf(" ** "); break; case 5 : printf(" ****"); break; case 6 : printf(" ****"); break; case 7 : printf(" ****"); break; case 8 : printf(" ****"); break; case 9 : printf(" ****"); break; } tmp -= top * s2; s2 /= 10; } while (tmp > 0); putchar('\n'); tmp = no; s2 = s; do { top = tmp / s2; /* tmpの一番上の桁の数字をtopへ */ switch (top) { case 0 : printf(" * *"); break; case 1 : printf(" *"); break; case 2 : printf(" *"); break; case 3 : printf(" *"); break; case 4 : printf(" * * "); break; case 5 : printf(" * "); break; case 6 : printf(" * "); break; case 7 : printf(" * *"); break; case 8 : printf(" * *"); break; case 9 : printf(" * *"); break; } tmp -= top * s2; s2 /= 10; } while (tmp > 0); putchar('\n'); tmp = no; s2 = s; do { top = tmp / s2; /* tmpの一番上の桁の数字をtopへ */ switch (top) { case 0 : printf(" * *"); break; case 1 : printf(" *"); break; case 2 : printf(" ****"); break; case 3 : printf(" ****"); break; case 4 : printf(" ****"); break; case 5 : printf(" ****"); break; case 6 : printf(" ****"); break; case 7 : printf(" *"); break; case 8 : printf(" ****"); break; case 9 : printf(" ****"); break; } tmp -= top * s2; s2 /= 10; } while (tmp > 0); putchar('\n'); tmp = no; s2 = s; do { top = tmp / s2; /* tmpの一番上の桁の数字をtopへ */ switch (top) { case 0 : printf(" * *"); break; case 1 : printf(" *"); break; case 2 : printf(" * "); break; case 3 : printf(" *"); break; case 4 : printf(" * "); break; case 5 : printf(" *"); break; case 6 : printf(" * *"); break; case 7 : printf(" *"); break; case 8 : printf(" * *"); break; case 9 : printf(" *"); break; } tmp -= top * s2; s2 /= 10; } while (tmp > 0); putchar('\n'); tmp = no; s2 = s; do { top = tmp / s2; /* tmpの一番上の桁の数字をtopへ */ switch (top) { case 0 : printf(" ****"); break; case 1 : printf(" *"); break; case 2 : printf(" ****"); break; case 3 : printf(" ****"); break; case 4 : printf(" * "); break; case 5 : printf(" ****"); break; case 6 : printf(" ****"); break; case 7 : printf(" *"); break; case 8 : printf(" ****"); break; case 9 : printf(" ****"); break; } tmp -= top * s2; s2 /= 10; } while (tmp > 0); putchar('\n'); return(0); }

  • C言語 switch文について

    C言語初心者です。 以下のようにC言語でプログラムを書いてみたのですが、 一つの入力に対して、対応するcase文に加えてdefault部の内容も表示されてしまいます。 (aを入力すると day before yesterday と day after tomorrowが表示されるような感じです) i,j,k などを使ってどう実行されているかを調べると、どうやら一回の入力に対して二回switch部を回っているようです。 そうにしろなぜaに対してdefaultへ飛ぶのか理解できませんが・・ また、最初の宣言をchar から int にして(caseは、case 1とかに適当に変えて)やると、正常に動くのも不可解です。 どうなっているんでしょうか・・ どなたかご教授願えると幸いです。よろしくお願いいたします。 #include <stdio.h> int main(void) { char n; int i=0,j=0,k=0; k++; while(scanf("%c",&n),n!='E'){ i++; switch(n){ case 'a': puts("day before yesterday"); break; case 'b': puts("yesterday"); break; case 'c': puts("today"); break; case 'd': puts("tomorrow"); break; default: puts("day after tomorrow"); break; j++; } } printf("%d\n",i); printf("%d\n",j); printf("%d\n",k); return 0; }

  • c言語初心者です。ついに。。

    西暦月日にちを入れると何曜日かを表示できるプラグラムをつくれましたー。まだif switch do while文しかしらないけど、switch文だけでできました。でも欠点があってうるう年の1月と2月はうまくできなんです。原因わわかっていてさいごの式bに-1をしなければいけないのですがそのうるう年だけ-1という計算をどうすればできるのかが思いつきません。もし詳しい人がいたら教えてくださいーー。 #include <stdio.h> int main(void) { int y, m, l, z,v,h,q,f,x,o,j,e,a,r,b; printf("西暦何年何月か入力してください\n"); printf("西暦。:"); scanf("%d",&y); printf("何月。:"); scanf("%d",&m); printf("何日。:"); scanf("%d",&l); z=y%400; v=y%100; h=z-v; f=h/100; switch(f) { case 3 : q=0; break; case 1 : q=4; break; case 2 : q=2; break; case 0 : q=6; break; } o=y%100; j=o/4; e=o+j; a=m; switch(a) { case 1 : r=0; break; case 2 : r=3; break; case 3 : r=3; break; case 4 : r=6; break; case 5 : r=1; break; case 6 : r=4; break; case 7 : r=6; break; case 8 : r=2; break; case 9 : r=5; break; case 10 : r=0; break; case 11 : r=3; break; case 12 : r=5; break; } b=q+e+r+l; switch (b % 7){ case 0 : puts("日曜日です。"); break; case 1 : puts("月曜日です。"); break; case 2 : puts("火曜日です。"); break; case 3 : puts("水曜日です。"); break; case 4 : puts("木曜日です。"); break; case 5 : puts("金曜日です。"); break; case 6 : puts("土曜日です。"); break; } return (0); }

  • C言語エラー

    C言語をいじっているのですが、16行目と19行目の「型」の前に「;」がありませんと表示されます。 どこをどう改善すればいいか教えてもらえないでしょうか /*遊び半分*/ #include <stdio.h> #include <process.h> int main() { char dear; printf("ああああ\n"); printf("ああああ \n"); scanf_s("%c", &dear); switch (dear){ case 'A04': ; int main(void); { printf("ああああ\n"); int main(void); printf("あああ\n"); printf("あああ\n"); break; system("pause"); return 0; } case 'C34' : printf("\n"); break; case 'E24' : printf("\n"); break; case 'F38' : printf("\n"); break; default: printf("メッセージはありません\n"); break;} return 0;

  • swich文を使って・・・

    swich文を使って、標準入力された数値を3で割った余りが 0のとき「hello world」 1のとき「こんにちわ」 2のとき「おつかれさまです」 と表示される、プログラムを作れ。 という問題なんですが、よく分かりません。 一応作ってみたんですが、違っているようです。。。 #include <stdio.h> void main(void) { int a,b,c,d; printf("数字を入力してください"); scanf("%d",&a); swich(a) { case 'b': printf("hello world",b=a%3==0); break; case 'c': printf("こんにちわ",c=a%3==0); break; case 'd': printf("おつかれさまです",d=a%3==0); break; } }

  • C言語について。初心者です。

    参考書の問題で、「整数値以下である正の偶数を照準に表示するプログラムを作成せよ」 例)整数を入力してください:19   2 4 6 8 10 12 14 16 18 とあり、自分で以下のプログラムを作ってみたのですが「222222・・・・・・・・・・・・・・・・・・」となるだけです。どう変えればちゃんと表示されるようになりますか?ちなみにwhile文を使うのが条件です。 #include<stdio.h> int main(void) {       int na; int nb=0; printf("整数を入力してください。:"); scanf("%d",&na); while(nb<na) printf("%d",nb+2); putchar('\n'); return 0; }

  • C言語のswitch文について間違っているところを教えてください

    初めに初心者ですので間違っているところは説明つきの回答をしていただければありがたいです。 今回switch文を使って 「足し算、引き算、掛け算、割り算」のプログラムを作ったつもりなのですが、intを使うと割り算の小数点が出ないしfioat文を使うとswitch文には、使えないと出るしどのようにしたら良いのか御回答よろしくお願いします。 (今は、int文でプログラムを作っているつもりです。) #include <stdio.h> void main (void) { int a,b,k; printf("どのような計算をしたいか数字を選んでください。\n"); printf(" 1.足し算 (例 a+b)\n"); printf(" 2.引き算 (例 aーb)\n"); printf(" 3.掛け算 (例 a×b)\n"); printf(" 4.割り算 (例 a÷b)\n"); printf("計算したい番号を入力してください "); scanf("%d",&k); switch (k){ case 1: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a+b で %d です\n",a+b); break; case 2: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは aーb で %d です\n",a-b); break; case 3: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a×b で %d です\n",a*b); break; case 4: printf("aを入力してください "); scanf("%d",&a); printf("bを入力してください "); scanf("%d",&b); printf("\n答えは a÷b で %d です\n",a/b); break; default: printf("明記してあるどれかの数字を再入力してください"); } }

  • C言語

    以下のようなhello.cがあります。 include<stdio.h> int main(void) { printf("Hello World! \n"); return 0; } gcc -E hello.c と打つとプリプロセッサが表示されます。 課題はこの中からprintfに関するものを見つけ、読み取れることを説明せよとのことです。 問題の意図と解き方がわかりません。 よろしくお願いします。 環境はwsl ubuntu です。

  • 【C初心者】+,-,*./について【電卓】

    【C初心者】+,-,*./について【電卓】 次のようなプログラミングを作りました。 きちんと実行できるのですが見ての通りややこしいプログラムになってます #include <stdio.h> int main(void) { int ope; double n2,n3; printf("整数1:"); scanf("%lf",&n2); puts("ADD=0,SUB=1,MUL=2,DIV=3");scanf("%d",&ope); printf("整数2:"); scanf("%lf",&n3); switch (ope) { case 0 : printf("計算すると%fになります.?n",n2+n3); break; case 1 : printf("計算すると%fになります.?n",n2-n3); break; case 2 : printf("計算すると%fになります.?n",n2*n3); break; case 3 : printf("計算すると%fになります.?n",n2/n3); break; default: printf("計算出来ません.?n"); break; } return (0); } printf文をcaseの中で5回も使っています 私としては(以下適当です、すいません) case 0 : sign= + ;break; case 1 : sign= - ・ ・ ・ default : 計算できません error=1 ;break; if (error != 0) printf("計算すると%fになります.?n",n2 sign n3); みたいな感じを想像しているのですが signはintとかcharのどれにしたらよくて signに"+"をいれて計算させるにはどうしたらいいんでしょう