为什么在 C++ 中不将字符视为数字?

Ibn*_*lan 2 c c++ int numbers char

我用 C 写了一段代码,运行完美,我把它翻译成 C++ 。在那里它给出了错误的输出。我有一个迭代,我使用输入和迭代器变量作为字符来节省空间。但并没有像预期的那样表现。

unsigned char repeat, i;  
cin >> repeat;
for(i= 0; i < repeat; i++)
Run Code Online (Sandbox Code Playgroud)

什么是等效线

scanf("%hhi", &repeat)
Run Code Online (Sandbox Code Playgroud)

?

Bas*_*tch 5

为什么在 C++ 中不将字符视为数字?

因为 C 和 C++ 是不同的编程语言。

参见例如n3337,一个 C++ 标准草案,实际上等同于C++11标准。对于C11编程语言,请查看n1570CompCert项目。

编程语言是一种规范,通常写在一些文档中。它的语义与其语法一样重要

如果您使用某些最新的GCC变体编译 C++ 源代码,我建议调用它,因为g++ -Wall -Wextra -g这样可以启用大量警告和一些调试信息。

还可以考虑使用一些静态程序分析工具,例如Frama-CClang 静态分析器Coverity等......

另请阅读如何调试小程序和关于未定义行为

另请参阅有关 C 和 C++ 的站点,并查看RefPerSys(我积极参与的一些“有趣的”C++免费软件项目,与AGI相关)。

研究现有 C++开源项目的源代码,至少是为了获得灵感。Qt的鱼贝立即想到的(但成千上万的人上存在的githubgitlab或其他地方,如GhudiPPL福克斯工具包FLTK)。通过积极为其中之一(甚至RefPerSys)做出贡献,您将学到很多东西

顺便说一句,我强烈建议在 C 或 C++ 中显式初始化每个数字变量(unsigned char repeat=0, i=0;在你的情况下是代码)。任何足够好的优化编译器都会在它们无用时将它们删除,并且当其行为变得更加确定时,调试您的程序(例如,使用gdb,特别是在 GNU/ Linux系统,如UbuntuDebian 上)会更容易。