質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

1回答

785閲覧

c言語でprintfがうまく表示されません

beginner23

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2023/06/18 04:42

実現したいこと

  • printfをコマンドプロンプトのに表示させたいです。

前提

今年の春からプログラミングの勉強を始めた初心者です。
学校の課題を進めるために正常にプログラムが作動するのかを途中経過を確認しようとprintf関数を使用したところ、コマンドプロンプトに何も表示されませんでした。自分なりにいろいろ試してみましたが、原因がわからずに困っています。

発生している問題・エラーメッセージ

C:\programing>tcc assign10-1-1.c -o assign10-1-1.exe C:\programing>assign10-1-1 C:\programing>tcc assign10-1-1.c -o assign10-1-1.exe C:\programing>assign10-1-1 C:\programing> (*assign10-1-1はプログラムの名前です。上のように何度実行しても何も表示されませんでした。)

該当のソースコード

c言語

1#include<stdio.h> 2#include<math.h> 3 4int main() 5{ 6 int i; 7 double x[1000000], ave, std, L, AVE; 8 9 ave = 0.0; 10 std = 0.0; 11 L = 0.0; 12 13 FILE *file1 = fopen("input9-1-2.txt", "r"); 14 15 16 for(i = 0; i < 1000000; i++) 17 { 18 fscanf(file1, "%lf", &x[i]); 19 ave += x[i]; 20 L += pow(x[i], 2.0); 21 } 22 23 ave /= 1000000.0; 24 L /= 1000000.0; 25 AVE = pow(ave, 2.0); 26 std = sqrt(L - AVE); 27 28 printf("%lf %lf\n", ave, std); 29 30 fclose(file1); 31 32 return 0; 33} 34

試したこと

atdを出すのにpow(L - AVE, 0.5)としてみたり、aveやLを2364277で割っていましたが、2364277.0にしてみたりしました。ちなみに一番上でaveをprintfを用いて表示させようとしましたが(この場合0.0と表示されるはずです。)それも表示されませんでした。

補足情報(FW/ツールのバージョンなど)

〇ファイルの中身は31.50や40.63などの二桁の正の実数です。
〇このプログラムはファイル内の数値の平均と標準偏差を求めるものを作ろうとしている最中です。
〇以前のプログラムではprintfは正常に働いていましたが、今回の1つ前のプログラムあたりから表示されなくなってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2023/06/18 04:52

tcc とは何者ですか。 デバッガ上で実行してみましたか。 項目数 1000000 を減らして実行するとどうなりますか。(そもそも x は配列である必要はない気がします)
jimbe

2023/06/18 05:06

>今回の1つ前のプログラムあたりから表示されなくなって 1つ前のプログラムで何をしたのでしょうか。
beginner23

2023/06/18 05:15

ご回答ありがとうございます。  私は初心者なので詳しくはわかりませんが、おそらくtccは私の使用しているコマンドプロンプトでコンパイルする際に必要なものだと思います。  プログラムに関しては、xを配列で無くしたところ大きい項目数でも表示されました! あまりに大きい値だと配列はうまく機能しないということでしょうか?勉強になりました。 ありがとうございました!
beginner23

2023/06/18 05:19

>jimbe ご質問ありがとうございます。 前回のプログラムは別の課題なので、今回のプログラムとは直接的な関係はございません。  前回のプログラムでも500くらいの配列を使用していたため、うまく作動しなかったのではないかと思います。  説明不足で申し訳ありません。
jimbe

2023/06/18 07:29

>前回のプログラムでも500くらいの配列を使用していたため、うまく作動しなかったのではないかと思います。 そういえばということを思い出した時点で、もう一度その時のことをやってみて表示されていた/されなくなった時の違いを比較出来れば、ご自身で対策が出来たかもしれませんね。
guest

回答1

0

ベストアンサー

c

1 double x[1000000], ave, std, L, AVE;

現在一般的な環境ではローカル変数として利用できるスタックのサイズには制限があります。その制限を超えるとプログラムがクラッシュしたりします。
コンパイル時や実行時にスタックサイズの上限を上げることが可能な場合がありますが、あまり大きなローカル変数は作らないようにするのがおすすめです。

投稿2023/06/18 05:31

int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

beginner23

2023/06/27 05:59

丁寧な回答をありがとうございます! 大きすぎる配列は使用できないんですね。 とても勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問