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

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

新規登録して質問してみよう
ただいま回答率
87.20%
VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

解決済

sscanf_s関数とループについて。

unikuma
unikuma

総合スコア8

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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

1回答

0評価

0クリップ

200閲覧

投稿2022/07/26 04:49

前提

C/C++でファイルの中身の値を取り出し、その後別の文字列に先ほど取得した値を使い置換するプログラムを作っています。
値の取り出しにはsscanf_s関数を使っているのですが、ループ2週目以降で値を取り出せていない気がします。

該当のソースコード

C++

#include <iostream> #include <fstream> #include <sstream> using namespace std; int main(void) { ifstream ifs("test.txt"); string text, line; while (getline(ifs, line)) { text += line + "\n"; } while (true) { double track0, track1; int color; int ret = sscanf_s(text.c_str(), "_name=アニメーション効果\ntrack0=%lf\ntrack1=%lf\nname=縁取り@YMM4\nparam=color=%x;", &track0, &track1, &color); if (ret == 0) { break; } string tmp[3]; stringstream ss; ss << track0; tmp[0] = ss.str(); ss.str(""); ss << track1; tmp[1] = ss.str(); ss.str(""); ss << hex << uppercase << color; tmp[2] = ss.str(); ss.str(""); string searchText = "_name=アニメーション効果\n" "track0="+tmp[0]+"\n" "track1="+tmp[1]+"\n" "name=縁取り@YMM4\n" "param=color=0x"+tmp[2]+";"; string replaceText = "_name=アニメーション効果\n" "track0="+tmp[0]+"\n" "track1="+tmp[1]+"\n" "track2=0.00\n" "track3=100.00\n" "check0=1\n" "type=0\n" "filter=0\n" "name=縁取りT\n" "param=local col1=0x"+tmp[2]+";local col2=0x0;local Lgr=0;local Mis=0;local MiV=25;local MiA=25;local mode=0;"; text.replace(text.find(searchText), searchText.length(), replaceText); } return 0; }

test.txt

_name=アニメーション効果 track0=5.1 track1=0.1 name=縁取り@YMM4 param=color=0xFF0000; _name=アニメーション効果 track0=3.1 track1=0.1 name=縁取り@YMM4 param=color=0xFFFFFF;

試したこと

1週目のループで

test.txt

_name=アニメーション効果 track0=5.1 track1=0.1 track2=0.00 track3=100.00 check0=1 type=0 filter=0 name=縁取りT param=local col1=0xFF0000;local col2=0x0;local Lgr=0;local Mis=0;local MiV=25;local MiA=25;local mode=0; _name=アニメーション効果 track0=3.1 track1=0.1 name=縁取り@YMM4 param=color=0xFFFFFF;

までは行けたのですが、
2週目でsscanf_sが上手く行ってないのかと思います。
ただなぜ上手く行かないのかの理由が分かりません。

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

Visual Studio 2022

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VC++

VC++ (Visual C++) とは、Microsoft製のC++のための統合開発環境です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

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