
Cプログラムで関数を呼び出すたびに関数の中でカウントアップ(line変数)したいと思っています。
しかし下記記述だとカウントアップされません。
記述をどのように変更すればよいか分からないでいます。
ご助言戴ければ幸いです。
宜しくお願いします。
◉入力ファイル(aaa、3行、1行1byte)
11
11
11
◉Cプログラム
void get_bgr();
main(argc, argv)
int argc;
char **argv;
{
int line;
line = 0;
size = 1;
num = 1;
unsigned char buf[1024];
infile[0] = fopen("aaa", "r");
while( fread(buf, size, num, infile[0]) == num){
get_bgr(line);
printf("line2=%d\n",line);
}
void get_bgr( line )
int line;
{
line++;
printf("line1=%d\n",line);
}
◉出力結果
line1=1
line2=0
line1=1
line2=0
line1=1
line2=0
◉期待値
line1=1
line2=1
line1=2
line2=2
line1=3
line2=3
No.1ベストアンサー
- 回答日時:
とりあえず、参考にしている書籍・サイト・教科書が古すぎます。
main(argc, argv)
int argc;
char **argv;
はすごく古い書き方なので現代風に改めましょう。
int main(int argc,char **argv)
と書きます。
void get_bgr( line )
も
void get_bgr( int line )
です。プロトタイプ宣言も同様に直しましょう。
で問題点ですが、get_bgr関数の仮引数のlineとmain関数のローカル変数lineは実際には名前が同じだけの別の変数です。
get_bgrの呼び出しの瞬間にmain→get_bgrでlineの値はコピーされますが逆は起こりません。なのでline++;してもmainのlineには反映されないです。
反映させる方法としてはlineの値を戻り値で返してlineで受けるか、lineをポインタで渡してポインタ参照で書き換える2つの方法があります。
zwiさん
ご連絡遅くなり申し訳ありません。
細かいご指摘ありがとうございます。
記述方法について、古い書き方があるということで、現代風に書き換えるようにします。
>反映させる方法としてはlineの値を戻り値で返してlineで受け
>るか、lineをポインタで渡してポインタ参照で書き換える2つ
>の方法があります。
関数からの戻り値を反映させる方法として2通りあるということで、こちらでも所望の期待値を得られること確認しました。
早急にご回答いただき大変助かりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python flask から fastapiへの移行時のエラー対処 1 2023/02/05 12:26
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(プログラミング・Web制作) pythonのエラーについて 2 2022/08/17 17:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- その他(プログラミング・Web制作) pythonのこのエラーがわかりません 3 2022/11/16 14:54
- 数学 「(((a0)/2)・1, 1) …(a0)/2の1倍と1の内積 =(a0)(1, 1) …1 と1 5 2022/07/05 19:11
- 英語 TOEIC公式問題集のリスニングの一部分に “I’ll get an ad in the local 2 2022/08/17 18:52
- Ruby 教えてください 2 2023/01/04 17:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
毎月記念日をlineで祝うのって...
-
face book で女性の方からline ...
-
遠くにいる友達とLINE交換する...
-
風俗に行ったとして、そこで嬢...
-
いきなりラインのトークに「新...
-
「一番上、真ん中、下」を示す英語
-
酔っ払って送られてきたlineが...
-
よく05(04)lineって見かけるん...
-
LaTeXでÅ
-
2000年生まれなのですが 00line...
-
会社の先輩とLINE プライベート...
-
先輩のライン(男性)を追加した...
-
妊娠したらどうする?聞くのは...
-
ある男子から、ライン追加され...
-
相手が携帯を解約していたら、L...
-
友達が、私のlineのトークを拡...
-
無料版FC2ホームページのエラー...
-
次の英文がわかりません;
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1コールだけ鳴るけど切れる電話...
-
相手側の携帯が電源切れてる時...
-
face book で女性の方からline ...
-
ラインナップとラインアップは...
-
Windowsのバッチファイルで正規...
-
風俗に行ったとして、そこで嬢...
-
よく05(04)lineって見かけるん...
-
生産ラインの品質を表す直行率...
-
いきなりラインのトークに「新...
-
毎月記念日をlineで祝うのって...
-
「一番上、真ん中、下」を示す英語
-
遠くにいる友達とLINE交換する...
-
python flask から fastapiへの...
-
swift言語のprintln()関数で「p...
-
ある男子から、ライン追加され...
-
先輩のライン(男性)を追加した...
-
新しいクラスメイト全員のLINE...
-
会社の先輩とLINE プライベート...
-
法線(normal line)はなぜそう...
-
INIファイルからのデータ読込み...
おすすめ情報