双精度数字程序意外值

Double Number Program Unexpected Values

本文关键字:意外 程序 数字 双精度      更新时间:2023-10-16

关于程序

程序获取用户输入的数字,并输出该数字加倍。我创建了两个函数,一个收集数字(getnumber),另一个将其加倍(doublenumber)。该程序确实可以正常工作;但是,输出并不完全准确。

问题所在

输出仅部分正确。即用户输入 50,值加倍,输出应为 100。相反,该值输出为 100114。只有前几个数字似乎是我想要的。

源代码:

#include <iostream>
void doublenumber(int&);
void getnumber(int&);
int main() {
int value;
getnumber(value);
doublenumber(value);
std::cin.get();
std::cin.get();

return 0;
}
void doublenumber(int &refvar) {
    refvar*= 2;
    std::cout << "nThe value you entered doubled is: " << refvar << '.n';
}
void getnumber(int &userNum) {
    std::cout << "nEnter a number to double: ";
    std::cin >> userNum;
}
std::cout << "nThe value you entered doubled is: " << refvar << '.n';
                                                                 ^^^^^
                                                                   |
                                                         multicharacter literal

它是一个多字符文字,并且具有一种int

C++11 §2.13.2 字符文字

字符

文字是用单引号括起来的一个或多个字符,如’x’,可选地在字母L前面,如L’x’。不以 L 开头的字符文本是普通字符文本,也称为窄字符文本。包含单个 c-char 的普通字符文本具有 char 类型,其值等于执行字符集中 c-char 编码的数值。包含多个 c-char 的普通字符文本是多字符文本。多字符文本具有类型 int 和实现定义的值。

看看这篇文章:为什么这个带有"1234"的代码在C++中编译?。

在仔细查看代码后,我已经回答了我自己的问题。呸!一个非常简单的错误:

 std::cout << "nThe value you entered doubled is: " << refvar << '.n';

"."应改为:".";"。有人可以告诉我为什么这会产生这个输出吗?