ここから本文です

Visual C++での質問です。 こんにちは、C++を絶賛勉強中の学生です。 以下の2...

mas********さん

2014/10/815:49:37

Visual C++での質問です。
こんにちは、C++を絶賛勉強中の学生です。

以下の2つのソースコードを繋げたいのですが、どうしてもうまくいかなくて困っています。

①file1.cの内容をfile2.cにコピーするプログラム
#include "stdafx.h"

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;

int _tmain(int argc, _TCHAR*argv[]){
string buf[1000];
int reteral = 0;
size_t i = 0, len = 0;

ifstream fin;
ofstream fout;
fin.open("file1.c");
fout.open("file2.c");
cout << "OK";

while (fin.getline(buf, 1000)){
fout << buf << "\n";
cout << " OK6\n";
}
fin.close();
fout.close();
return 0;
}

と、②ブロックコメントとインラインコメントを削除するプログラム
inline void removeComments(std::string &str) {
std::string::size_type posOfBlockHead = 0, posOfInlineHead = 0, posOfTail, posOfCR, posOfLF;
while
(
(posOfBlockHead = str.find("/*", posOfBlockHead))
!= (posOfInlineHead = str.find("//", posOfInlineHead))
)
{
if (posOfBlockHead < posOfInlineHead) {
// ブロックコメントを削除
posOfTail = str.find("*/", posOfBlockHead + 2);
str.erase(posOfBlockHead, posOfTail - posOfBlockHead + 2);
posOfInlineHead = posOfBlockHead;
}
else {
// インラインコメントを削除
posOfCR = str.find("\r", posOfInlineHead + 2);
posOfLF = str.find("\n", posOfInlineHead + 2);
str.erase(posOfInlineHead, posOfCR < posOfLF ? posOfCR - posOfInlineHead : posOfLF - posOfInlineHead);
posOfBlockHead = posOfInlineHead;
}
} // end while
です。②のプログラムを①のfin.close();の前の行の入れて動かしていたのですが、エラーが出て何が悪いのかわかりません。
正しい動作へのアドバイスなどあればよろしくお願いします。

閲覧数:
81
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

buy********さん

2014/10/816:13:12

>masakilangleyさん

もとの(1)のコードにシンタックスエラーがあるからじゃないの?
修正してコンパイルできるようにしたのが以下。
こちらのコンパイラがMinGWなのでそれでコンパイルできるように修正した。

MinGW以外だと元に戻したほうがよいところが3箇所あります。
修正箇所にはコメント入れてます。
動作確認はしてない。コンパイルできるようにしただけ。


/#include "stdafx.h" //*** MinGW用
#define _TCHAR char //*** MinGW用

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;

// (2)
inline void removeComments(std::string &str) {
std::string::size_type posOfBlockHead = 0, posOfInlineHead = 0, posOfTail, posOfCR, posOfLF;
while
(
(posOfBlockHead = str.find("/*", posOfBlockHead))
!= (posOfInlineHead = str.find("//", posOfInlineHead))
)
{
if (posOfBlockHead < posOfInlineHead) {
// ブロックコメントを削除
posOfTail = str.find("*/", posOfBlockHead + 2);
str.erase(posOfBlockHead, posOfTail - posOfBlockHead + 2);
posOfInlineHead = posOfBlockHead;
}
else {
// インラインコメントを削除
posOfCR = str.find("\r", posOfInlineHead + 2);
posOfLF = str.find("\n", posOfInlineHead + 2);
str.erase(posOfInlineHead, posOfCR < posOfLF ? posOfCR - posOfInlineHead : posOfLF - posOfInlineHead);
posOfBlockHead = posOfInlineHead;
}
}
}


//int _tmain(int argc, _TCHAR*argv[]){
int main(int argc, _TCHAR*argv[]){ //*** MinGW用
char buf[1000]; /*** string -> char */
int reteral = 0;
size_t i = 0, len = 0;

ifstream fin;
ofstream fout;
fin.open("file1.c");
fout.open("file2.c");
cout << "OK";

while (fin.getline(buf,1000)){
std::string s(buf); /*** 追加 */
removeComments(s);
fout << s << "\n";
cout << " OK6\n";
}
fin.close();
fout.close();
return 0;
}

  • buy********さん

    2014/10/816:14:35

    コンパイル時にワーニングが3つでてる。
    使ってないならこれらの変数は消した方が良いかも。



    MinGW586_mwin_004.cpp: In function ‘int main(int, char**)’:
    MinGW586_mwin_004.cpp:40:7: warning: unused variable ‘reteral’ [-Wunused-variable]
    int reteral = 0;
    ^
    MinGW586_mwin_004.cpp:41:10: warning: unused variable ‘i’ [-Wunused-variable]
    size_t i = 0, len = 0;
    ^
    MinGW586_mwin_004.cpp:41:17: warning: unused variable ‘len’ [-Wunused-variable]
    size_t i = 0, len = 0;
    ^

    こちらでのソースの名称が MinGW586_mwin_004.cpp

  • その他の返信(3件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2014/10/10 15:46:22

降参 ベストアンサーにさせていただきます。ありがとうございました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる