プログラミングエラーの修正方法と変数iの有効範囲について

このQ&Aのポイント
  • プログラムの修正方法としては、main関数のプロトタイプ宣言を行い、変数の型指定を追加することでエラーを解消することができます。
  • 変数iの有効範囲は、関数foo()と関数goo()内のみであり、main関数や他の関数では参照することはできません。
  • 要約3の文章
回答を見る
  • ベストアンサー

プログラミング エラー部分

#include<stdio.h> int i=3; int foo(){ i++; return(i); } int goo(int i){ i=foo(); return(i); } main(){ printf("%d\n",goo(1)); } このままこのプログラムを入力すると main(){  のところに  型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません と出るのですが、どうやったら上手く出来るのか分かる方いましたら宜しくお願いします。 それと、加えまして 上のプログラムの中で 関数foo()と関数goo()内の変数iの有効範囲は どこからどこまでなのでしょうか。 質問2つになってしまいましたが、片方でもわかる方宜しくお願いいますm(__)m

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

. main(){ こんな書き方、最近ではやりません。 ○参考にしたものがとても古い ○主目的が別にあり(ゲームプログラミング入門とか、数値解析とか)C言語はオマケ程度にしか解説していない のどちらかではないかと。 前者なら、それのことは忘れて、新しい本を買ってください。 後者なら、内容だけを参考にして、C言語は別の本を買って勉強してください。 > 変数iの有効範囲 「スコープ」といいます。 とても大事なことです。 ちゃんとした解説書で勉強してください。 このプログラムでは、あまり理解の助けにならないでしょう。

Trafalgar_law
質問者

お礼

kmeeさんありがとうございます(;_:) 本を見たら古いものでした。 何でもいいからと手にって見ていたのが悪い原因だっと理解できました。 大変感謝しています。

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1619/5653)
回答No.2

>main(){  のところに  >型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません mainの型指定がないという事なので型を指定してあげてください。 >上のプログラムの中で >関数foo()と関数goo()内の変数iの有効範囲は >どこからどこまでなのでしょうか。 自分で考えてみましたか? 入門書や http://www.atmarkit.co.jp/fcoding/articles/c/09/c09a.html などを参考に考えてみてください。

Trafalgar_law
質問者

お礼

本を読んでみたのですが分からず質問させて頂きました。 解答ありがとうございました!

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

とりあえずメッセージはちゃんと読め. 「型指定子がありません」ってあるんだから (適当な) 型指定子を付けろってことだ. で変数の有効範囲は宣言からそのスコープの終わりまで.

Trafalgar_law
質問者

お礼

ありがとうございます☆ 大域変数や局所変数の違いがあるものかと思っていました。

関連するQ&A

  • プログラミング

    プログラミング初心者なのですが、次のソースについて説明お願いします。 #include<stdio.h> int main(void) { int a[3]; int i; for(i = 0; i <= 2; i++) { a[i] = i + 1; printf("a[%d] = %d\n", i a[i]); } return 0; } for文でiに0を代入して繰り返す条件を仮定したあとの a[i] = i + 1; とprintfの中の仕組みがよくわかりません・・・。 お願いします<(_ _)>

  • プログラミング

    C++で、五個の配列を確保し、それらを関数を使って逆順にしたいのですが、別の配列にコピーして逆順にしたいです。下記のプログラムを作ったのですが、どこがいけないのでしょうか? #include "stdafx.h" #include <stdio.h> void reverse (int z[],int w[]); int main(void) { int p[5]={1,2,3,4,5},u[5]; reverse(p,u); printf("逆順=%d\n",p); return 0; } void reverse(int z[],int w[]) { int i; for(i=0;i<=5;i++){ w[i]=z[i-1]; } }

  • プログラミングに関する問題が解けません;;

    1 「ファイルの入出力」 以下のプログラムはdata.txtのデータを読み込み,画面に出力するものです. 下記のプログラムの######を埋めて完成させよ. #include <stdio.h> #include <stdlib.h> int main(void){     char dummy[128], filename[128];     FILE *fp;     char x;   sprintf(filename,"data.txt");     fp=fopen(filename, "r");     if(#####(1)####) {        printf("ファイル%s が見つかりません\n",filename);        return(-1);      } while(#########(2)############){ putchar(x); } fclose(fp); return(0); } 2 構造体を用いたプログラム 名前と点数用のメンバを持つ構造体dataを宣言しなさい。 また、名前と点数を表示する関数hyoujiを完成させよ。 #include <stdio.h> (1) void hyouji(###(2)###, int no); int main(void){ struct data member[3] = {{"伊藤", 71},{"小林", 81},{"山田", 67},}; hyouji(member, 3); } void hyouji(####(3)####, int no){ int i; for(i=0; i<no; i++){ printf("%s:%d\n", ###(4)###); mem++; } } 3 「2次元配列を使った行列の四則演算」 次のプログラムは、2次元配列の和を求め結果を表示するためのものである. 関数 mat_tasu()の中身を完成させよ. ただし関数 mat_tasu()は引数を持たない関数とします. #include<stdio.h> int ma[2][2]={{1,2}, {3,4}}; int mb[2][2]={{5,6}, {7,8}}; int mc[2][2]; void mat_tasu(void); int main(void) { int i,j; mat_tasu(); for (i=0; i<2; i++){ for (j=0; j<2; j++) printf("%3d", mc[i][j]); putchar('\n'); } return (0); } /* 行列の和の計算 */ void mat_tasu(void) {      (1) } 各問題の(1)や(2)みたいになってるところに当てはまるプログラミングを教えてください! 一問だけでもいいので分かる方いましたら、回答お願いいたします!

  • C言語プログラミングについて

    #include <stdio.h> int main(void) { printf("hello,world\n"); } □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ #include <stdio.h> int main(void) { printf("hello"); printf(",world"); printf("\n"); } 上の2つのプログラムをコンパイルするとどのような違いが生じるんですか??printfってどんな働きをするんですか?

  • エラー C言語 プログラミングについて

    #include<stdio.h> int leapYear(int); int main(void){ int year,i; for(i=2001;i=2999;i++){ year=i; printf("%d leap = %d \n",i,leapYear(int year)); return 0; } } int leapYear(int year){ if(year%100==0){ return 0; } else if(year%400==0){ return 1; } else if(year%4==0 && year%100!=0){ return 1; } } をコンパイルすると11行目に式の構文エラーが出るんですが どうしてでしょうか?? 間違ってない気がするんですけど。。

  • 変数の使い方

    お聞きしたいのですが、下記の main関数、getaverage関数の両方で 変数averageを宣言してますが、 名前は同じだが、まったく別変数と考えて良いのですか? 教えてください。 #include <stdio.h> int getaverage(int data[10]); int main(void) { int average,array[10] = {15,78,98,15,98,85,17,35,42,15}; average = getaverage(array); printf("%d\n",average); return 0; } int getaverage(int data[10]) { int i,average = 0; for (i = 0;i < 10;i++) { average += data[i]; } return average / 10; }

  • プログラミング 配列 合計

    配列の要素に値を読み込んで表示させるプログラムは 1#include <stdio.h> 2 3int main(void) 4{ 5 6 int i; 7 int vc[5]; 8 9 for (i = 0; i < 5; i++) 10 vc[i] =i + 1; 11 12 for(i = 0; i < 5; i++) 13 printf("vc[%d] = %d\n", i, vc[i]); 14 15 return (0); }でこれを書きなおして配列の値を合計するプログラムはどういうプログラムになるか教えていただけませんか?

  • コンパイルエラー

    コンパイルしても、12行目(printf("%d番目の整数を入力してください。"i+1);が、関数呼び出しに)がないとでます。でもどこが間違っているか分かりません。 教えてください。お願いします。 #include <stdio.h> int main(void) { int num; int sum=0; int i; for(i=0; i<10; i++){ printf("%d番目の整数を入力してください。"i+1); scanf("%d", &num); sum+=num; } printf("合計は、%dです。\n", sum); return(0); }

  • プログラミング 関数

    教えてください。 入力された文字列のうち、文字aの数を数える関数count_aを作成する。 以下は関数count_aを利用したmainのプログラムの例です。 #include <stdio.h> int count_a(char str[]); int main ( void ) { char str[255]="abcaeag"; printf("%d\n",count_a(str)); return 0; }

  • 構文エラー";"が型の前にありませんとは、どうしたら解決できるのですか。

    キーボードから正の整数を読み取り、n個の奇数を加算しディスプレイにかきだすプログラムです。;が型の前に必要というエラーがずっとでてきて、でも足りないところはわからないのですが、何が違うのでしょう??もうわけがわからなくて困ってます。お願いします。 /*演習1-3*/ #include<stdio.h> int main() { int i; int n; int sum=0; printf("%d¥n",n); for (i=1;i<=n;i+=2); int scanf("%d",&n); sum+=i; printf("1+2+...+n=%d\n",sum); return 0; }

専門家に質問してみよう