singlepost

вопрос по C++ << На главную или назад  

нужно ввести строкув Visual C++ 2008 вот написал код
cout<<"Please enter string:";
cin>>str1;
В строку записывается только одно слово, если я правильно понял это потому что пробел воспринимается как символ разрыва строки, вопрос: как по другому ввести строку ?

125 ответов в теме “вопрос по C++”

  1. 30
    Максим Железняков ответил:

    ясно

  2. 29
    Вася Пупкинъ ответил:

    cin и cout работают с типом char, wcin и wcout – с типом wchar_t.
    char может хранить до 256 комбинаций, размер wchar_t не регламентирован, но он обязан вмещать одну кодовую позицию, тоесть символ, конкретной платформы, на которой работает компилятор.
    Строки теперь будут состоять из wchar_t, а не char.

    w – это сокращение от wide, тоесть теперь строки будут UNICODE, что позволит вводить – выводить кирилицу и т.д.
    Также придется использовать wstring, для файлов – wifstream/wofstream и т.д.

  3. 28
    Андрей Юткин ответил:

    Поддержской юникода

  4. 27
    Максим Железняков ответил:

    а чем отличается wcin, wcout от cin и cout ?

  5. 26
    Максим Железняков ответил:

    Да , мне нужно чтоб переменная получала строку любым способом, сделал я это так как посоветовали

    char buf[256];
    cin.getline(buf, 256);

    поправка: \0 – нулевой концевой символ строки который многие функции C++ распознают как символ разрыва строки, если интересно это я прочитал в книге
    "Джесс Либерти
    Освой самостоятельно C++ за 21 день, 3-е издание" стр 351

  6. 25
    Вася Пупкинъ ответил:

    стоит взглянуть на:
    //stackoverflow.com/questions/201992/how-to-rea...
    особенно интересен вариант с использованием итераторов

    смежная тема:
    //stackoverflow.com/questions/201992/how-to-rea...

    и на засыпку: хватит использовать cin и cout, привыкайте к wcin, wcout, wstring и т.д.

  7. 24
    Андрей Ковалев ответил:

    из мсдн знаю такие символы \n \t и ещё другие, но среди них нет \0
    поисковик микрософта тоже не знает
    вопрос канешно не корректный был, тебе надо чтобы через cin переменная получала строку?

  8. 23
    Максим Железняков ответил:

    в Visual C++ 2008 символ разрыва строки обозначается как символ\0,cin>>воспринимает пробел и табуляцию как символ разрыва строки (в программе я вводил строку с клавиатуры потом сразу же выводил её на экран, выводились все символы до пробела)

  9. 22
    Андрей Ковалев ответил:

    непонятно, что имеется под понятием разрыва строки
    перенос её на следующую или то как процедуры понимают, что это конец строки?
    если перенос, то это в std endl делает
    если второе и то как в памяти это осуществляется, то обычно это 0×0, а не пробел (0×20). пробел это такой же символ.
    в реальном режиме проца с прерыванием 21 и если в ah, вроде, 9, можно использовать как конец строки символ $
    так что не понятно с чего решил, что пробел

  10. 21
    Василий Степанов ответил:

    а нормального варианта так никто и не предложил… :(

    #include <iostream>
    #include <string>

    int main() {
    std::string s;
    std::getline(std::cin, s);

    std::cout << s << std::endl;
    return 0;
    }

  11. 20
    Василий Степанов ответил:

    нюансы и подводные камни

    using std::string;

    в том, что после этого в коде нельзя будет объявить свой класс с именем string, функцию… или глобальную переменную.

    и что куда обиднее… нельзя будет подинклюдить какой-нибудь хеадер, где этот идентификатор используется.

  12. 19
    Леонид Максимов ответил:

    грозит? ну, компилятор станет понимать string без указания неймспейса :) )

  13. 18
    Никита Токарчук ответил:

    чем грозит использование
    using std::string;
    ?
    ну, нюансы какие нибудь и т.п. ?

  14. 17
    Никита Токарчук ответил:

    не знаю. я с С++ недавно..

    [code]
    #include <stdio.h>
    #include <string.h>

    int main(){
    string s;
    }
    [/code]

    ..\main.cpp: In function `int main()':
    ..\main.cpp:12: error: `string' was not declared in this scope

  15. 16
    Сергей Старовой ответил:

    #17
    #include <string>
    using std::string;
    //…
    string s;

  16. 15
    Андрей Юткин ответил:

    Что значит нету если string прописан в стандарте C++?

  17. 14
    Максим Железняков ответил:

    всем спасибо)), подошёл последний вариант

  18. 13
    Никита Токарчук ответил:

    в моем коде избежать переполнения:

    char* s = (char*)malloc(sizeof(char)*255);
    fgets(s,sizeof(char)*255,stdin);

    (в строке останется символ перевода строки)

  19. 12
    Николай Терентьев ответил:

    ээ… чото я не понял. А почему бы не объявить переменную типа string ?

  20. 11
    Никита Токарчук ответил:

    по идее в C++ такой нету

    VS конечно рулит, там вроде есть. но я его не люблю, под гцц круче )

  21. 10
    Максим Железняков ответил:

    почему не катит
    char* s = (char*)malloc(sizeof(char)*255);
    scanf("%s",s);
    ?
    это тоже не работает, в строку тока первое слово записывается т.е. до 1-ого пробела

  22. 9
    Никита Токарчук ответил:

    char* s = (char*)malloc(sizeof(char)*255);
    gets(s);

  23. 8
    Никита Токарчук ответил:

    если нужен потом форматированный ввод то можно заюзать sscanf после gets

  24. 7
    Сергей Старовой ответил:

    char buf[256];
    cin.getline(buf, 256);
    Второй параметр – размер буфера, чтобы избежать переполнения.

  25. 6
    Николай Немов ответил:

    #3) Это тоже будет работать до пробела

  26. 5
    Игорь Федоров ответил:

    сканф же кстати тоже до пробела читает вроде? разве нет?

  27. 4
    Никита Токарчук ответил:

    у меня работает с пробелами.ща проверю

    точно..

  28. 3
    Николай Немов ответил:

    char a;
    int i;
    while(str1[i-1]!='\n')
    {
    cin>>a;
    str1[i++]=a;
    }
    Как-то так

  29. 2
    Никита Токарчук ответил:

    почему не катит
    char* s = (char*)malloc(sizeof(char)*255);
    scanf("%s",s);
    ?

  30. 1
    Леонид Максимов ответил:

    си++

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.