C++混淆。从文本文件中读取整数并转换为ASCII

11

我第一次学习C++,没有编程背景。

在我看的这本书中,我看到了这个例子。

#include <iostream>

using::cout;
using::endl;

int main()
{
    int x = 5;
    char y = char(x);

    cout << x << endl;
    cout << y << endl;

    return 0;
}

这个例子很好理解:打印一个整数和它的ASCII表示。现在,我创建了一个包含这些值的文本文件。
48
49
50
51
55
56
75

我正在编写一个程序来读取这个文本文件 -- "theFile.txt" -- 并且想要将这些数字转换为ASCII值。
以下是我编写的代码。
#include <iostream>
#include <fstream>

using std::cout;
using std::endl;
using std::ifstream;

int main()
{
    ifstream thestream;
    thestream.open("theFile.txt");

    char thecharacter;  

    while (thestream.get(thecharacter))
    {
        int theinteger = int(thecharacter);
        char thechar = char(theinteger);
        cout << theinteger << "\t" << thechar << endl;
    }


    system ("PAUSE");
    return 0;
}

这是我对第二个程序的理解。

  • 编译器不知道“theFile.txt”文件中包含的确切数据类型,因此我需要指定它,所以我选择将数据读取为char类型。
  • 我将文件中每个数字都以char类型读取,并将其转换为整数值并存储在“theinteger”中。
  • 由于“theinteger”中有一个整数,我想将其作为字符打印出来,但是char thechar = char(theinteger); 的效果不如预期。

我做错了什么?


那么,你的程序现在做了什么? - Sam
3
这是我们在 Stack Overflow 上错过的第一类问题。恭喜。 - erelender
这完全偏离了主题,所以我只是写了一个评论。如果你能得到《加速C++》这本书,一定要看一下。它有一种完全不同的学习C++的方法,从STL和高级构造开始,然后逐步深入细节。 - David Rodríguez - dribeas
感谢推荐。我打算今天晚些时候去书店,会找那本书的。 - newbie
谢谢大家。根据回复,我已经找出了我的错误。如果有兴趣,我可以发布最终版本,但是一旦我弄清楚我做错了什么,它对我来说就更加简单明了了。 - newbie
显示剩余2条评论
2个回答

6

您正在逐个字符地阅读,但我认为您实际上希望将每个数字序列作为整数读取。请将您的循环更改为:

int theinteger; 
while (thestream >> theinteger )
{
    char thechar = char(theinteger);
    cout << thechar << endl;
}

+1 非常好的格式和表达方式,顺便说一句!


是的,你说得对,尼尔。我想要完整地读取每个数字。每个数字都在自己的一行上。像这样犯错常见吗?就是你打算做某事,但使用了错误的命令?希望我表达清楚了。 - newbie

2

您正在从文件中逐个字符地读取。因此,如果您的文件包含:

2424

您需要从文件中先读取字符“2”,将其转换为整数,然后再将其转换回字符,这样就可以在cout中打印出“2”。下一轮将打印“4”,以此类推。

如果您想将数字作为完整数字读取,则需要执行以下操作:

int theinteger;
thestream >> theinteger;
cout << char(theinteger) << endl;

哦,我明白了。一个(char)字符是单个的。哦,我的愚蠢错误。 - newbie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接