我正在尝试将char
转换为int
以便在for
循环中使用,但我得到了我发现的意外结果。
我添加了cout
行,以查看char
转换为的值。
char
取自ifstream
,该is_number(char)
来自包含字母和数字的.txt文件。文件中的第一个数字是3,但它被转换为51。
代码现在位于
之下 如果char == '0' || char == '1' || char == '2' || ...etc
(最多char == '9'
), in
会返回true
ifstream
是out
,ofstream
是int 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}}
(我以前加密了一条线,但是
)答案 0 :(得分:1)
int t = inputB;
这不是进行转换的正确方法。这样你得到character code,这不是你想要的。
使用此:
int t = inputB - '0';
您也可以将其写为int t = inputB - 48
,这完全相同(如果您的系统使用ASCII编码 - 几乎普遍为真),但'0'
的版本被认为更具可读性(并且正确)无论字符编码如何。)
答案 1 :(得分:1)
首先,您的inputA
和inputB
在循环开始时未定义。来自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