双数字程序意外值

时间:2014-02-26 18:20:58

标签: c++ function pass-by-reference

关于该计划

程序接受用户输入的数字并输出该数字加倍。我创建了两个函数,一个收集数字(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;
}

2 个答案:

答案 0 :(得分:3)

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和实现定义的值。

查看此帖子:Why does this code with '1234' compile in C++?

答案 1 :(得分:1)

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

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

“'。\ n'”应该是:“。\ n”;“相反。有人可以告诉我为什么会产生这个输出吗?