将char转换为int显示不等数

时间:2013-12-08 17:15:15

标签: c++ type-conversion

我正在尝试将char转换为int以便在for循环中使用,但我得到了我发现的意外结果。

我添加了cout行,以查看char转换为的值。

char取自ifstream,该is_number(char)来自包含字母和数字的.txt文件。文件中的第一个数字是3,但它被转换为51。

程序的

代码现在位于

之下 如果char == '0' || char == '1' || char == '2' || ...etc(最多char == '9'

in会返回true

ifstreamoutofstreamint t = (int)inputB

我尝试过演员表,例如int t = static_cast<int>(inputB)#include <fstream> #include <iostream> using namespace std; bool is_number(char); int main(){ ifstream in; ofstream out; in.open("in.txt"); if (in.fail()){ return 0; } out.open("out.txt"); if (out.fail()){ return 0; } char inputA, inputB; while (!in.eof()) { if (inputA != 'ÿ' && inputA != '\0') { if (is_number(inputB) && inputA != '\\'){ int t = inputB; //inputB is 3, but t becomes 51 cout << inputB << " " << t << ".\n"; for (int i = 0; i < t; i++){ out << inputA ; } } } inputA = inputB; in.get(inputB); } return 0; } bool is_number(char c){ if (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') return true; return false; } ,但他们会给出相同的结果。

我是否犯了一个菜鸟错误?有什么想法吗?

修改

最小化程序:

zo3logists 10as2ist stewardes2es.3

.txt文件“in.txt”的内容是:

{{1}}

(我以前加密了一条线,但是

2 个答案:

答案 0 :(得分:1)

int t = inputB;

这不是进行转换的正确方法。这样你得到character code,这不是你想要的。

使用此:

int t = inputB - '0';

您也可以将其写为int t = inputB - 48,这完全相同(如果您的系统使用ASCII编码 - 几乎普遍为真),但'0'的版本被认为更具可读性(并且正确)无论字符编码如何。)

答案 1 :(得分:1)

首先,您的inputAinputB在循环开始时未定义。来自anatolyg的解决方案是最简单的。你也可以使用这样的东西:

// include <string>

string str;
sstr = inputB;
int t = stoi(str); // you have to be sure that inputB is a number
                   // or need exception handling

你会安全的,当charset会被改变时'1'不会出现在'0'之后。但这很不确定;)

顺便说一句:您可以简化ìs_number(char c)

if ('0' >= c && c <= '9')
    return true
else
    return false