2017-09-24 4 views
-1

背景: ここに表示されている問題/コードは、作成しようとしている大きなプログラムの一部です(私はそれを削除するように言われました)。 (このセクションの)目的は、std :: cin入力を受け取り、それが機能するときにsrcdsControl-> WriteText(string(chr));に関数を渡すことです。この関数は、自分自身を作成し​​ていない大きなプログラムの一部です。std :: cin >>でのC++デバッグアサーションエラーchar

私は入力と出力をC++コンソールアプリケーションからPythonスクリプトにリダイレクトしようとしています(これは私が書いたものです)。私はコンソールウィンドウに入力すると、入力の罰金を受け取ります。私は(フォーマット「コマンドします\ r \ n」)でのpythonからプログラムの標準入力に入力を送信するときしかし、それは次のエラーをトリガ:

C++ Debug Assertion Failed error

私は、次のプログラムの両方を試してみました彼らはまったく同じエラーを出します。

私のC++コード(テスト1):

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      if (std::cin >> std::noskipws >> chr[0]) 
      { 
       if (chr[0] == '\r') 
        std::cout << "\r"; 
       //srcdsControl->WriteText(string(chr)); 
       std::cout << std::string(chr) << "\r\n"; 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

私のC++コード(テスト2):

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      std::string s = ""; 
      if (std::getline(std::cin, s)) 
      { 
       for (char& ch : s) { 
        chr[0] = ch; 
        if (chr[0] == '\r') 
         std::cout << "\r"; 
        //srcdsControl->WriteText(std::string(chr)); 
        std::cout << std::string(chr) << "\r\n"; 
       } 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

:私はC++開発者およびC++の私の知識ではありませんよ非常に限られています。私は特定の/簡単な答えが必要です。

私の質問:このエラーを防止し、入力が正しく受信されていることを確認するにはどうすればよいですか?必要に応じて入力を受け取るために全く別の方法を使用しても構いませんが、具体的なデモンストレーションが必要です。

+0

完全な行を探しているように見えるので、 'std :: getline'を使ってデータを読むことを検討してください。 '\ r'はウィンドウ内の行末マーカーの半分だけです。ダイアログの一番下にある「アプリケーションをデバッグするために再試行を押してください」という小さなメモを参照し、機会を活用してください。 – user4581301

+0

*このエラーを防ぐにはどうすればいいですか?* C++コードを大きなプログラムに入れる前に、これらの行だけで非常に小さな 'main'プログラムが動作するようになります。 C++ストリームがどのように動作するかを見るために、このテストを行うためにPythonを導入したり、スレッド化したり、 'WriteText'を呼び出す必要はありません。これはコードスニペットではなく[mcve]と見なされていました。 – PaulMcKenzie

+0

@PaulMcKenzie私はちょうど小さなメインプログラムを表示するために投稿を編集しました。 – ZSmith

答えて

0

何とか私自身の問題を解決することができました。

#include "stdafx.h" 
#include <iostream> 
#include <string> 

int main() 
{ 
    try 
    { 
     char chr[2]; 
     chr[1] = 0; 
     while (1) 
     { 
      char c; 
      if (std::cin >> std::noskipws >> c) 
      { 
       chr[0] = c; 
       if (chr[0] == '\r') 
        std::cout << "\r"; 
       //srcdsControl->WriteText(string(chr)); 
       std::cout << std::string(chr) << std::endl; 
      } 
     } 
    } 
    catch (...) 
    { 
     // Ignore exception and just stop the thread. 
    } 
} 

このコードは、エラーを出さずにほしいと思うようです。なぜ誰かがこのことがうまく説明できて、前のコードがそれを知らなかったら、それは面白いだろう。

関連する問題