• 締切済み

プログラムの有用無用

↓このプログラムを VISUAL C++  2008 express editionで コンパイルしても エラーが出てしまいます。。。 #include <stdio.h> void main(void); void main(void) { char c = 'c'; printf("c = '%c'\n", c); if (c >= 'a' && c <= 'z') /* c が英小文字なら真 */ printf("c は小文字です。\n"); else printf("c は小文字ではありません。\n"); if (c >= '0' && c <= '9') /* c が数字なら真 */ printf("c は数字です。\n"); else printf("c は数字ではありません。\n"); if (c == '+' || c == '-') /* c が '+' か '-' なら真 */ printf("c は符号です。\n"); else printf("c は符号ではありません。\n"); } どうしてなのーーー???

みんなの回答

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

>#6さん >(6)printf文で%cの前後のシングルコーテーション(')は不要 不要と決めつけることはできないです。 もとの質問者さんは、前後にシングルクォーテーションを付けて出力したかったのではないでしょうか。

  • katouka09
  • ベストアンサー率50% (130/256)
回答No.6

質問番号:4736317にて、コンパイルのやり方を教えてもらっていますよね? その手順でやった結果が、コンパイルエラーなのでしょうか? だとしたら、あなたが提示したソースに問題があると思います。 質問する際には、問題のソースを全部提示する必要があります。 その上で、自分で解決できない部分を質問したほうがいいです。 あなたが提示したソースの問題点: (1)main関数に対するプロトタイプ宣言は不要 (2)main関数の型はint型である (3)main関数の括弧が閉じられていない (4)char型の変数に対してif文で比較していますが、代入している箇所が無いので比較する意味が無い。(常にcが入力されている状態) (5)エラーメッセージに対応するソースが提示されていない (6)printf文で%cの前後のシングルコーテーション(')は不要 それと、C言語のソースであれば、拡張子が*.cになると思います。 cppの場合は、C++のソースとコンパイラが判断してしまうので、 エラーが出るのでは?

yusuke4400
質問者

補足

たぶん  同じソリューションに なんこも、ソースファイルを作り 各々にmain() を使っていたのがいけなかったと思います それに、いろいろな人から おなじような指摘を受けました もう少し試行錯誤してから また質問に来ます 親切にこたえていただいて ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

#1への 補足内容と 質問のコードは一致していないように思います #1への補足では『関数 find』に関して未確定の要素があるのに使用しています といった内容になっていますが質問に『find』に関する記述が見受けられません VC2005(VC8.0)以降はソースの文字コードの標準が『マルチバイト』から『Unicode』に変更になっています 古めのサンプルですと『マルチバイト』を対象に書かれていることが多いと思います プロジェクトのプロパティで『文字セット』を『マルチバイト文字セットを使う』に変更しないとワーニングやエラーに嵐に見舞われる場合があります 文字定数の記述 char mstr[] = "マルチバイト"; char_w wstr[] = L"ユニコード"; といった違いがあります また、セキュリティの観点から _sつきの関数を使うように警告される ことも多いでしょう Ex scanf,printf,strcpyなど ・・・ # _sつきの関数は 引数が多少変更になっているバイがあるので # リファレンス(MSDNなど)で確認しましょう

yusuke4400
質問者

お礼

すこしむずかしいですが ありがとうございました

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.4

このプログラムは何かの本やウェブページにあったものでしょうか。 余計なお節介だとは思いますが、今どきmain()関数の型をvoidで宣言するような資料は参考にしない方がいいでしょう。 コンパイルが通っても「正しい」プログラムではありません。

  • chie65535
  • ベストアンサー率43% (8524/19374)
回答No.3

プログラムにmain関数があって、printfとかってのを使ってる場合は「コンソールアプリケーション」としてコンパイルしないとダメだ。 「出来上がるアプリケーションの種類」をちゃんと設定して、元になるソースプログラムも「C言語」なのか「C++言語」なのか、ちゃんと設定してやらないと、エラーは消えない。 http://cvwww.ee.ous.ac.jp/vc08prog.html とかよ~く読んで「コンパイル、ビルドする前の、準備の方法」を習得してください。 質問者さんは「コンパイル作業をするのはまだ早い。その前に覚えること、やらないといけないことがいっぱいある」のです。 「VISUAL C++2008をインストールして、サンプルをコピペしてビルドしただけ」でプログラムが動くと思ったら大間違い。世の中、そんなに甘くはありません。覚える事をちゃんと覚えて、やることをちゃんとやらないと、ビルドは成功しませんよ。

yusuke4400
質問者

お礼

ぼくも 一応勉強はしてます それに コンソールアプリケーションとして つくりました。 それにもとになるげんご は どうみても Cげんごでしょ それに、PICなどのプログラムは メモ帳などでなんどもつくっているんです そのいいかたはないんじゃないですか~~~ まーでも まだ 駆け出しなので はんろんは できませんが すこしショックを受けました、、、、

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

同じ内容の質問で新たな質問をするのは止めてください。 前の回答に補足の形で書き込む事から始めてくださいね。

yusuke4400
質問者

お礼

聞きたかったら 補足からするんですか==」 知りませんでした これからはそうしま^す

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

で、そのエラーメッセージの内容は?

yusuke4400
質問者

補足

こんな感じなのですが わかりますか??? 1>------ ビルド開始: プロジェクト: 4400, 構成: Debug Win32 ------ 1>コンパイルしています... 1>3300.cpp 1>c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(8) : error C2143: 構文エラー : ';' が 'end of file' の前にありません。 1>c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(6) : error C2146: 構文エラー : ';' が、識別子 'find' の前に必要です。 1> c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(8) : コンパイルされたクラスの テンプレート のインスタンス化 'set<_K,_Pr,_A>' の参照を確認してください 1>c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(6) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(6) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\users\yusuke mitani\documents\visual studio 2008\projects\4400\4400\3300.cpp(6) : warning C4183: 'find': 戻り値の型がありません。'int' を返すメンバ関数とみなします。 1>ビルドログは "file://c:\Users\yusuke mitani\Documents\Visual Studio 2008\Projects\4400\4400\Debug\BuildLog.htm" に保存されました。 1>4400 - エラー 4、警告 1 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== ぜひ  おねがいします

関連するQ&A

  • c言語についての質問です。

    #include<stdio.h> int main(void){ int a; printf("1文字たいぷしてください。\n"); scanf("%d",&a); if(a>=65 && a<=90){ printf("大文字です。\n"); } else if(a>=97 && a<=122){ printf("小文字です。\n"); } else{ printf("大文字でも小文字でもありません\n"); } return 0; } このプログラムは正しくなくて、 intをchar %dを%cにかえなければなりません。 なぜintはダメなんでしょうか? できれば丁寧に教えてください。 お願いします。

  • 再帰プログラム

    #include<stdio.h> int rstrlen(char*); int main(void) { char str[100]; printf("文字列を入力してください\n"); gets(str); printf("文字数は %d です\n",rstrlen(str)); return 0; } int rstrlen(char *p) { if(*p){ p++; return 1+rstrlen(p); } else return 0; } 文字数を計算するプログラムです。 if(*p)の*pとはNULLを表しているのですか?

  • プログラムの動きがわからない

    現在C言語の勉強をしているのですが、プログラムの動きが(流れ)よくわかりません。 #include <stdio.h> int is_digit(char x) { if(((x)>='0')&&((x)<='9')){ return 1; } else{ return 0; } } main() { char c; c='0'; if(is_digit(c)){ printf("cは数値文字です。\n"); } return 0; } 上記のプログラムなのですがどのように値渡しが行われているかがわかりません。 ちなみにこのプログラムを書き直すとこのように↓なるようです このプログラムだけエラーが出てしまいました。 #include <stdio.h> #define IS_DIGIT(X) (((X)>='0')&&((X)<='9'))?1:0) main() { char c; c='0'; if(IS_DIGIT(c)){ printf("cは文字列です。\n"); } return 0; } ちなみに教本はこれを使っています。http://7andy.yahoo.co.jp/books/detail?accd=31457604

  • Cのプログラム(初心者)

    #include<stdio.h> void main(void) { int a,b,c; printf("西暦で生まれた年を入力してください。\n"); scanf("%d",&a); printf("今の年を西暦で入力してください。\n"); scanf("%d",&b); c=b-a; if('0'<=c&&c<='23'){ printf("あなたは%d歳です。げんき。\n",c); } else if('24'<=c&&c<='40'){ printf("あなたは%d歳です。仕事盛り。\n",c); } else if('41'<=c&&c<='60'){ printf("あなたは%d歳です。まだいける。\n",c); } else if('61'<=c&&c<='99'){ printf("あなたは%d歳です。がんばれ。\n",c); } else{ printf("100歳以上なの?\n"); } } というプログラムを作っているのですが、うまく実行できません。間違いがあると思うのですが、それもよくわかりません。ビルドは成功するのですが、どの数字を入力しても「げんき」しか出てきません。 わかる人がいたら教えてください。 お願いします。

  • 再帰プログラム

    strに格納されている文字数を数えるプログラムです。 #include<stdio.h> int rstrlen(char *); int main(void) { char str[] = {"abcdefghijk"}; printf("文字数:%d\n",rstrlen(str)); return 0; } int rstrlen(char *p) { if(*p) { p++; printf(p); return 1 + rstrlen (p); } else return 0; } return 1 + rstrlen (p);の部分で再帰をし1をプラスすることにより文字数をカウントしmainのprintfで文字数を表示しているのですがカウントしている値はどこに格納していてどのようにmainに返しているのかが分かりませんでした。教えてください。

  • プログラムの添削

    以下のようなプログラムを作りました.よりよい書き方,アドバイスなどお願いします. /*文字列の入力を繰り返し受け取るプログラムを作成しなさい.*/ #include<stdio.h> #include<string.h> int main(void) { char bigstr[101],str[31]; printf("文字列の入力を繰り返し受け取るプログラムです.\n"); strcpy(str,""); strcpy(bigstr,""); for(;;) { printf("文字列を入力してください.\n"); gets(str); if(strlen(str)>30) { printf("入力できる文字数の上限(20字)を超えました.\n"); return 0; } else if(strcmp(str,"quit")) { strcat(bigstr,str); if(strlen(bigstr)>100) { printf("入力できる文字数の上限(合計100字)を超えました.\n"); return 0; } } else break; } printf("%s\n",bigstr); return 0; }

  • 打ち込んだ数字が素数かどうか判断するプログラム

    数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。 コンパイルはできるのですが…。 どなたか間違っているところを教えてください。 #include<stdio.h> int main ( void ) { int a,b,indicator=1; printf("正の整数:"); scanf("%d", &a ); /* indicator=1.......素数でない indicator=0.......素数である */ if(a<=1){ indicator=1; } else { for(b=2;b<=(a-1);b++) { if(a%b == 0){ indicator=0; } } if(indicator==1) { printf("%dは素数ではありません\n",a); } else if (indicator==0) { printf("%dは素数です\n",a); } } return 0; }

  • コマンドライン引数argv[]について

    C言語初心者です。以下のようなプログラムを書いたのですが、コンパイルで来ません。関数func1, func2を分けずに全てメインに書けば動作するのですが、なぜ関数に分けてしまうとコンパイル出来ないのかがわかりません。エラー内容は、argvが宣言されていない、といった内容です。 #include <stdio.h> void func1(void){ printf("%s\n", argv[1]); } void func2(void){ printf("%s\n", argv[2]); } int main(int argc, char *argv[]){ if(strcmp(argv[1], "abc")==0){ func1(); } else{ func2(); } }

  • またプログラムの修正おねがいします。

    キーボードから出力した3つの整数について、以下の判定を行い 判定結果を出力するプログラムを作成する。 全部同じ 2つ同じ バラバラ * 論理演算子を使わないこと。 * インデントを正しくつけること。 #include<stdio.h> void main(void) { int a,b,c; printf("a --->"); scanf("%d",$a); printf("b --->"); scanf("%d",$b); printf("c --->"); scanf("%d",$c); if(a==b){ if(b==c){ printf("全部同じ\n"); } } else if(a!=b){ if(b==c){ printf("2つ同じ"); } else if(a==c){ printf("2つ同じ"); } else{ printf("バラバラ"); } } } 最近c言語を習ったばっかりなのでわからないとこだらけです。よろしくお願いします。

  • 初歩的な質問です char同士が同じ値(=)の確認について

    これはサンプルですが値は 「bad」を返してしまいます。 char 同士の=判定はどのようにすればいいでしょうか? どちらとも数字が入っていますが、charをintに変更する必要があるのでしょうか?もしそうだとしたらどうしたらいいのか教えてください^^ #include "stdio.h" main(){    char a[10]={"555"};   char b[10]={"555"};     if(a==b){      printf("good\n");     }else{      printf("bad\n");   } }

専門家に質問してみよう