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

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

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

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

536閲覧

test2.txtに書き込んだ「strtalk = 1,str[7] = あいう」を読み込みたいです。

R-ogiura

総合スコア60

C

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/11/14 18:55

編集2019/11/14 20:58

以前に解決した質問でカズマさんや皆様に教えられたやり方でうまくいったので今回も同じように作ってみたのですがstrtalkの数値すら読み込めないようで困っています。

以下はプログラムです。

#include "DxLib.h" #include "stdio.h" #pragma warning(disable: 4996) int i = 0; int countchar = 0; char str[7]; int loop = 1; int Green = GetColor(0, 255, 0); int x = 0, y = 0; int a,b; int strtalk = 0; int mark = 0; void mozi(void) { if (countchar >= 0) { ++countchar; } if (countchar == 50) { countchar = 0; ++i; //ループを止めるためのプログラム。 if (i == 6) { countchar = 11; } } if (i == 1) { a = i; } //printf("str[%d]は%c", i,str[i-1]); if (a == 1) { DrawFormatString(100+10, 500, Green, "%c%c", str[0], str[1]); } if (i == 2) { b = i; } //printf("str[%d]は%c", i,str[i-1]); if (b == 2) { DrawFormatString(100 + 20, 500, Green, "%c%c", str[2], str[3]); } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { //ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定 SetFontSize(25); //サイズを64に変更 SetFontThickness(10); //太さを8に変更 ChangeFont("MS 明朝"); //種類をMS明朝に変更 ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォントに変更 SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理 SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 // ウインドウのサイズを手動ではできず、且つウインドウのサイズに合わせて拡大もしないようにする SetWindowSizeChangeEnableFlag(FALSE, FALSE); // 画面サイズは最大の780*680にしておく SetGraphMode(780, 680, 32); // 最初は 640x480 にしておく SetWindowSize(780, 680); // while(裏画面を表画面に反映, メッセージ処理, 画面クリア) while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) { DrawFormatString(300, 400, Green, "countcharは%d", countchar, Font00); // 文字を描画する DrawFormatString(10, 50, Green, "%d", i, Font00); DrawFormatString(20, 100, Green, "%d", a, Font00); FILE* fp = fopen("test2.txt", "r"); if (!fp); if (fscanf(fp, "strtalk = %d,str[7] = %c", &strtalk,&str[7]) != 1); fclose(fp); DrawFormatString(200, 200, Green, "str[7] = %c", str[7]); DrawFormatString(200, 300, Green, "strtalk = %d", strtalk); mozi(); } DxLib_End(); // DXライブラリ終了処理 return 0; }

試しにtest.txtにstrtalk = 1だけ書いて、strtalkの数値だけ読み取れるか書いてみましたが0のままでした。

FILE* fp = fopen("test2.txt", "r"); if (!fp); if (fscanf(fp, "strtalk = %d", &strtalk) != 1); fclose(fp); DrawFormatString(200, 300, Green, "strtalk = %d", strtalk);

編集1

#include "DxLib.h" #include "stdio.h" #pragma warning(disable: 4996) int i = 0; int countchar = 0; int loop = 1; int Green = GetColor(0, 255, 0); int x = 0, y = 0; int a,b,c; int mark = 0; int strtalk = 0; char str[7] = "あいう"; void mozi(void) { if (countchar >= 0) { ++countchar; } if (countchar == 50) { countchar = 0; ++i; //ループを止めるためのプログラム。 if (i == 6) { countchar = 11; } } if (i == 1) { a = i; } //printf("str[%d]は%c", i,str[i-1]); if (a == 1) { DrawFormatString(100+10, 500, Green, "%c%c", str[0], str[1]); } if (i == 2) { b = i; } //printf("str[%d]は%c", i,str[i-1]); if (b == 2) { DrawFormatString(100 + 30, 500, Green, "%c%c", str[2], str[3]); } if (i == 3) { c = i; } //printf("str[%d]は%c", i,str[i-1]); if (c == 3) { DrawFormatString(100 + 50, 500, Green, "%c%c", str[4], str[5]); } } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { SetFontSize(25); //サイズを64に変更 SetFontThickness(10); //太さを8に変更 ChangeFont("MS 明朝"); //種類をMS明朝に変更 ChangeFontType(DX_FONTTYPE_ANTIALIASING); //アンチエイリアスフォントに変更 SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理 SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 // ウインドウのサイズを手動ではできず、且つウインドウのサイズに合わせて拡大もしないようにする SetWindowSizeChangeEnableFlag(FALSE, FALSE); // 画面サイズは最大の780*680にしておく SetGraphMode(780, 680, 32); // 最初は 640x480 にしておく SetWindowSize(780, 680); // while(裏画面を表画面に反映, メッセージ処理, 画面クリア) while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) { DrawFormatString(300, 400, Green, "countcharは%d", countchar, Font00); // 文字を描画する mozi();//関数を置くことでiを含んだ描画の関数が働くようになる。 } DxLib_End(); // DXライブラリ終了処理 return 0; }

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

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

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

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

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

R-ogiura

2019/11/14 20:36

心当たりというかその人のコードを少し拝借しました。 なので似ている部分があるだけです。
cateye

2019/11/14 22:32

Cの構文をもう少し勉強しましょう。特に条件分岐や関数の使い方。 ・・・誤字・脱字・不要な文字・・・ソースを見直してd^^
Zuishin

2019/11/14 23:50

うまくいってないコードを拝借する意味が分からない。
Zuishin

2019/11/14 23:51

拝借したオリジナルにリンクを張らない意味もわからない。
Zuishin

2019/11/14 23:52

副アカウントで書いたのがバレてコードを拝借したと言う言い訳をした前科あり。
episteme

2019/11/15 00:17

副アカウントなら不届き者だし、そうでなければ無礼者やな。
guest

回答2

0

test.txt に書いたものを fopen("test2.txt", "r") で読めるはずがありません。

while ループの中で、同じファイルを何回読み直しても結果は同じです。
while ループに入る前に読み込みましょう。
1秒間に 60回ファイルを読みこむなんて無茶苦茶です。
DxLib の基本が分かっていないようです。

if (!fp); は無意味です。

if (fscanf(fp, "strtalk = %d,str[7] = %c", &strtalk,&str[7]) != 1);

fscanf は実行されますが、!= 1 が意味不明。
; という空文も無意味です。

char str[7]; と宣言すると、使えるのは str[0], str[1], ..., str[6] だけです。
str[7] は使えません。C/C++ の基本です。

// 最初は 640x480 にしておく

SetWindowSize(780, 680);

コメントとコードが不整合。

インデントが変。

投稿2019/11/14 19:53

kazuma-s

総合スコア8224

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

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

R-ogiura

2019/11/14 21:10

解答ありがとうございます。 相談したことがあります。一文字ずつ文字を描画するようには書けたのですが、 一文字事にif (i == 1) { a = i; } //printf("str[%d]は%c", i,str[i-1]); if (a == 1) { DrawFormatString(100+10, 500, Green, "%c%c", str[0], str[1]); } と書いて、かつ文章ごとにmoziのように新しい関数を書くのが大変面倒なのですが、 読み込む、あるいはchar型の変数からの文字を一文字ずつ描画するような関数に入れて面倒を省きたいのですが、どのように書けばいいでしょうか。
episteme

2019/11/14 23:20 編集

↑当初の質問とはまったく別モノだから新たに質問を起こすべきでは? # で、当初の問題は解決したのか?
guest

0

試しにtest.txtにstrtalk = 1だけ書いて、strtalkの数値だけ読み取れるか書いてみましたが0のままでした。

いや、ちゃんと読み取れますよ(test.txt じゃなく test2.txt なら)。

test2.c:

C

1#include <stdio.h> 2 3int main() { 4 int strtalk = -999; 5 FILE* fp = fopen("test2.txt", "r"); 6 fscanf(fp, "strtalk = %d", &strtalk); 7 fclose(fp); 8 printf("strtalk = %d", strtalk); 9 return 0; 10}

test2.txt:

strtalk = 123

投稿2019/11/14 20:07

編集2019/11/14 20:09
episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問