我正在尝试在我的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
不确定我为什么会得到负数
答案 0 :(得分: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));
}
或this
// Thanks, WhozCraig
int main () {
std::vector<int> results((std::istream_iterator<int>(std::cin)),
std::istream_iterator<int>());
}
答案 1 :(得分:0)
-38 = 10 - 48
,即-38 = '\n' - '0'
在C(和C ++中)中,您可以将字符文字用作整数。
您可以跳过测试读取值的无效字符:
#include <cctype>
if (isdigit(j)) ...
答案 2 :(得分: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,但我猜它不会忽略空格/换行符