Программа двойных чисел Неожиданные значения

0

О программе

Программа принимает номер, введенный пользователем, и выводит этот номер в два раза. Я создал две функции, которые собирают число (getnumber), а другое - удваивает его (doublelumber). Программа работает правильно; однако выход не является полностью точным.

Проблема

Выход только частично. Т.е. пользователь вводит 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;
}
Теги:
function
pass-by-reference

2 ответа

3
Лучший ответ
std::cout << "\nThe value you entered doubled is: " << refvar << '.\n';
                                                                 ^^^^^
                                                                   |
                                                         multicharacter literal

Это многоканальный литерал и имеет тип int.

C++ 11 §2.13.2 Символьные литералы

Литеральный символ - это один или несколько символов, заключенных в одинарные кавычки, как в x, необязательно предшествующие букве L, как в Lx. Литеральный символ, который не начинается с L является литералом обычного характера, также называемым литералом узкого символа. Литерал обычного символа, который содержит один c-char, имеет тип char, значение которого равно числовому значению кодировки c-char в наборе символов выполнения. Литерал обычного характера, содержащий более одного c-char, является многоканальным литералом. Многоканальный литерал имеет тип int и значение, определяемое реализацией.

Отметьте это сообщение: Почему этот код с '1234' компилируется в C++? ,

1

Я ответил на свой вопрос, внимательно просмотрев код. Тьфу! Очень простая ошибка:

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

"\n" должен быть: ".\N"; "Вместо этого. Может ли кто-нибудь сказать мне, почему это выдало этот результат?

  • 2
    Исходный код выводит 100 (правильный ответ) и сразу после этого значение многосимвольного литерала '.\n' , который интерпретируется как int : stackoverflow.com/questions/7459939/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню