-1

C++ プログラムで Char を Int に変換しようとしていますが、このサイトのいくつかの回答に従いましたが、まだ機能していません。ファイルld.txtに次のデータを含む入力ファイルがあります

4
8 2
5 6
8 2
2 3

>./LD < ld.txt

int main()
{
    using namespace std;
    std::vector<int> nums;
    int i,k;
    char j;
    for(i=0;;i++)
    {
        j=fgetc(stdin);
        int l =j - 48;
        if(feof(stdin))
            break;
        nums.push_back(l);
        cout<<nums[i]<<endl;
    }
}

出力は次のとおりです。

4 
-38 
8 
-16
2
-38
5
-16
6
-38
8
-16
2
-38
2
-16
3
-38

負の数を取得する理由がわかりません

4

3 に答える 3

4

出力内の負の数値は、入力ファイル内の値が 48 未満の文字を表します。具体的には、スペース (' 'または 32) と改行 ('\n'または 10) はそれぞれ 48 未満です。


ファイルから整数のリストを読み込む他の方法を次に示します。

// UNTESTED
int main () {
   int i;
   std::vector<int> results;
   while ( std::cin >> i )
       results.push_back(i);
}

また

// UNTESTED
int main () {
    std::vector<int> results;
    std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
      std::back_inserter(results));
}

またはこれ

// Thanks, WhozCraig
int main () {
    std::vector<int> results((std::istream_iterator<int>(std::cin)),
        std::istream_iterator<int>());
}
于 2013-08-31T22:46:55.167 に答える
0

これはあなたが探しているものでなければなりません

int main() {
    vector<int> nums;
    int i,k;
    char j;
    while(cin >> j){
        int l =j - 48;
        nums.push_back(l);
    }
    for(int i =0; i < nums.size(); i++)
        cout << nums[i] << " ";
    cout << endl;

}

問題は、cin が空白と改行文字を無視することです。以前に fgetsc を使用したことはありませんが、空白/改行を無視しないと推測しています

于 2013-08-31T22:52:33.240 に答える
0

-38 = 10 - 48すなわち-38 = '\n' - '0'

C (および C++ も同様) では、文字リテラルを整数として使用できます。

読み取った値をテストする無効な文字をスキップできます。

#include <cctype>

if (isdigit(j)) ...
于 2013-08-31T22:48:48.857 に答える