-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

-38 = 10 - 48IE-38 = '\n' - '0'

在 C(以及 C++)中,您可以将字符文字用作整数。

您可以跳过无效字符测试读取的值:

#include <cctype>

if (isdigit(j)) ...
于 2013-08-31T22:48:48.857 回答
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 回答