2015-09-10 5 views
-2

Хорошо, у меня есть проблема программирования, но, к сожалению, хотя мой код в теории не работает, мне было интересно, была ли это проблемой компилятора (я использую Code :: Blocks) или если его что-то я не вижу. Любая помощь будет оценена, спасибо!cin statement не будет компилироваться

Вот мой код:

#include <iostream> 

#include <string> 

#include <math.h> 

using namespace std; 

int main(){ 

    double sliceStore, sliceSize = 14.125, totalSlice, area; 

cout << "How Many Slices?" << endl; 
//getline(cin,sliceStore); 
cin >> sliceStore >> endl; 

return 0; 
} 
+2

Что не работает? Что вы пытались исправить? – Prismatic

+5

'endl' является константой. Вы не должны пытаться изменить его значение. Используйте его только с выводами, а не с вводами. – Logicrat

+0

Что вы пытаетесь сделать с 'cin >> endl'? Вы можете посмотреть на 'std :: istream :: ignore', в частности,' cin.ignore() '. –

ответ

0

Удалить "епсИ" из входного заявления !!

0

Полное сообщения об ошибке для этого не красиво и продолжается в течение нескольких страниц, но код :: блоки обычно фронты GCC и г ++, C компилятор GCC в ++, должны были начать послание с чем-то вроде этого:

cin >> sliceStore >> endl; 
       ^

На английском языке компилятор не смог найти способ для оператора >> поместить данные в endl. Немного прочитайте, на что endl может решить вашу проблему. endl - это функция, а не переменная.

ostream& endl(ostream&) 

Взломайте учебник и прочитайте информацию о входных и выходных потоках.

cin - это имя входного потока, подключенного к основной консоли, обычно представленного командной строкой. Входные потоки используют >>, который также является функцией, которая обычно выглядит как

Таким образом, cin >> endl; на самом деле выглядит как вызов функции что-то вроде

cin = operator>>(cin, endl()); 

Однако никто не построил оператор >> с somedatatype, который выглядит как ostream& endl(ostream&) и отпечатками компилятор из огромного списка операторов >> возможностей, которые выглядят как-то это как намек на то, что вы могли бы сделать.

Большую часть времени это полезно. Большинство функций имеют только пару перегрузок, и вы можете быстро увидеть, что вы сделали неправильно. Но оператор >> имеет перегрузку для каждого общего типа данных и десятки не очень распространенных типов данных. Мля.

Что касается функции endl.

Он сообщает выходному потоку, чтобы сделать две вещи: закончить линию и сбросить выходной буфер.

Завершение линии довольно просто, единственное предостережение - все, похоже, делают это по-другому, поэтому, если вы скомпилируете одну и ту же программу в разных операционных системах, вы получите немного другой выход.

Выходной буферный поток является инструкцией выходного потока для отправки любых данных, на которые он держался, буферизации, для хорошей возможности отправить его. Обычно вы хотите отправить материал в куски, потому что он более эффективен. Предположим, вы хотите записать файл. В мире компьютеров, где все происходит в наносекундах, запись в файл может занять несколько секунд. Например, жесткий диск может находиться в состоянии с низким энергопотреблением и должен начать вращаться. Затем он должен найти, где файл находится на жестком диске. Затем он должен ждать, пока жесткий диск вращается в нужное положение. Вы не хотите проходить все это только для того, чтобы писать один символ, как каждый раз, когда вы нажимаете клавишу на клавиатуре, поэтому компьютер создает кучу записей в памяти - буфер - вы записываете содержимое буфера после того, как он заполняется, не был добавлен на некоторое время или принудительно с инструкцией по флешу.endl обеспечивает флеш. В результате чрезмерное использование endl может замедлить вашу программу.

Смежные вопросы