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

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

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

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

Q&A

2回答

1741閲覧

c言語ファイルの足し算

Totyun

総合スコア2

C

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

0グッド

0クリップ

投稿2021/05/25 07:55

入力するとファイルの中の数字をその列から最後まで足すというプログラムを作りたいのですがエラーが起きてしまいます

#include <stdio.h>
#include <stdlib.h>

int main()
{
char str[10];
int i,j;
FILE *fp = fopen("data.txt","r");
printf("数字の個数:");
scanf("%d",i);         ここの列がエラーが起こります
for(i=1;i<=10;i++){
printf("合計:%d\n",i);
j=i/2;
printf("平均:%d",j);
exit(EXIT_FAILURE);
}
}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/25 07:57

ソースコードはコードブロックを使って記載しましょう。 エラーは内容も重要なので記載しましょう。
guest

回答2

0

テキストファイルから数値を読み込むのはfscanfを使えば楽です。

質問文と貼られたコードからでは今一どういった事がしたいのかがわかりませんが、
scanfで入力された個数分の数値をテキストファイルから読み込みたいという事なら下記のようにすればできます。
(※data.txtは数字と数字の間にスペースや改行を入れて下さい)

C

1#include <stdio.h> 2#include <stdlib.h> 3 4int main() 5{ 6 int *P, Max = 0, Add = 0; 7 8 FILE* fp = fopen("data.txt", "r"); 9 if (fp == 0) { 10 printf("ファイルを開くのに失敗しました。\n"); 11 return 1; 12 } 13 14 while(1){ 15 printf("数字の個数:"); 16 scanf("%d", &Max); 17 if (Max <= 0) { 18 printf("1以上の数値を入力して下さい\n"); 19 } 20 else { 21 break; 22 } 23 } 24 25 P = (int*)calloc(Max, sizeof(int));//動的メモリ確保 26 27 for (int i = 0; i < Max; i++) { 28 if (fscanf(fp, "%d", &P[i]) == -1){//テキストファイルから数値読み込み 29 printf("テキストファイルから%d個の数字しか読み込めませんでした。\n",i); 30 free(P); //メモリ解放 31 fclose(fp); //ファイルのクローズ 32 return 1; 33 } 34 Add += P[i]; 35 } 36 37 printf("合計:%d\n", Add); 38 printf("平均:%d\n", Add / Max); 39 40 free(P); //メモリ解放 41 fclose(fp); //ファイルのクローズ 42 43 return 0; 44}

あと環境書いてないですけど、VisualStudioだとscanffscanfは警告が出るのでコードの頭に、

c

1#define _CRT_SECURE_NO_WARNINGS

と書く必要があります。

投稿2021/05/25 10:01

編集2021/05/26 00:26
kousatu

総合スコア225

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

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

0

scanfには値を格納する変数の「アドレス」を指定します。
したがってscanf("%d", &i);とするべきです。

…しかし、その直後にfor(i=1iに代入してしまっているので、台無しですね…。
もう少し考えてみてください。

投稿2021/05/25 08:00

itagagaki

総合スコア8402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問