нужно ввести строкув Visual C++ 2008 вот написал код
cout<<"Please enter string:";
cin>>str1;
В строку записывается только одно слово, если я правильно понял это потому что пробел воспринимается как символ разрыва строки, вопрос: как по другому ввести строку ?
7 ноября 2009 в 8:03
ясно
7 ноября 2009 в 0:03
cin и cout работают с типом char, wcin и wcout – с типом wchar_t.
char может хранить до 256 комбинаций, размер wchar_t не регламентирован, но он обязан вмещать одну кодовую позицию, тоесть символ, конкретной платформы, на которой работает компилятор.
Строки теперь будут состоять из wchar_t, а не char.
w – это сокращение от wide, тоесть теперь строки будут UNICODE, что позволит вводить – выводить кирилицу и т.д.
Также придется использовать wstring, для файлов – wifstream/wofstream и т.д.
7 ноября 2009 в 0:01
Поддержской юникода
6 ноября 2009 в 23:04
а чем отличается wcin, wcout от cin и cout ?
6 ноября 2009 в 22:05
Да , мне нужно чтоб переменная получала строку любым способом, сделал я это так как посоветовали
char buf[256];
cin.getline(buf, 256);
поправка: \0 – нулевой концевой символ строки который многие функции C++ распознают как символ разрыва строки, если интересно это я прочитал в книге
"Джесс Либерти
Освой самостоятельно C++ за 21 день, 3-е издание" стр 351
6 ноября 2009 в 21:04
стоит взглянуть на:
//stackoverflow.com/questions/201992/how-to-rea...
особенно интересен вариант с использованием итераторов
смежная тема:
//stackoverflow.com/questions/201992/how-to-rea...
и на засыпку: хватит использовать cin и cout, привыкайте к wcin, wcout, wstring и т.д.
6 ноября 2009 в 21:02
из мсдн знаю такие символы \n \t и ещё другие, но среди них нет \0
поисковик микрософта тоже не знает
вопрос канешно не корректный был, тебе надо чтобы через cin переменная получала строку?
6 ноября 2009 в 15:00
в Visual C++ 2008 символ разрыва строки обозначается как символ\0,cin>>воспринимает пробел и табуляцию как символ разрыва строки (в программе я вводил строку с клавиатуры потом сразу же выводил её на экран, выводились все символы до пробела)
6 ноября 2009 в 8:00
непонятно, что имеется под понятием разрыва строки
перенос её на следующую или то как процедуры понимают, что это конец строки?
если перенос, то это в std endl делает
если второе и то как в памяти это осуществляется, то обычно это 0×0, а не пробел (0×20). пробел это такой же символ.
в реальном режиме проца с прерыванием 21 и если в ah, вроде, 9, можно использовать как конец строки символ $
так что не понятно с чего решил, что пробел
6 ноября 2009 в 2:03
а нормального варианта так никто и не предложил…
#include <iostream>
#include <string>
int main() {
std::string s;
std::getline(std::cin, s);
std::cout << s << std::endl;
return 0;
}
6 ноября 2009 в 2:03
нюансы и подводные камни
using std::string;
в том, что после этого в коде нельзя будет объявить свой класс с именем string, функцию… или глобальную переменную.
и что куда обиднее… нельзя будет подинклюдить какой-нибудь хеадер, где этот идентификатор используется.
6 ноября 2009 в 0:03
грозит? ну, компилятор станет понимать string без указания неймспейса )
6 ноября 2009 в 0:02
чем грозит использование
using std::string;
?
ну, нюансы какие нибудь и т.п. ?
6 ноября 2009 в 0:01
не знаю. я с С++ недавно..
[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
6 ноября 2009 в 0:01
#17
#include <string>
using std::string;
//…
string s;
6 ноября 2009 в 0:00
Что значит нету если string прописан в стандарте C++?
5 ноября 2009 в 23:05
всем спасибо)), подошёл последний вариант
5 ноября 2009 в 23:05
в моем коде избежать переполнения:
char* s = (char*)malloc(sizeof(char)*255);
fgets(s,sizeof(char)*255,stdin);
(в строке останется символ перевода строки)
5 ноября 2009 в 23:05
ээ… чото я не понял. А почему бы не объявить переменную типа string ?
5 ноября 2009 в 23:05
по идее в C++ такой нету
VS конечно рулит, там вроде есть. но я его не люблю, под гцц круче )
5 ноября 2009 в 23:04
почему не катит
char* s = (char*)malloc(sizeof(char)*255);
scanf("%s",s);
?
это тоже не работает, в строку тока первое слово записывается т.е. до 1-ого пробела
5 ноября 2009 в 23:04
char* s = (char*)malloc(sizeof(char)*255);
gets(s);
5 ноября 2009 в 23:04
если нужен потом форматированный ввод то можно заюзать sscanf после gets
5 ноября 2009 в 23:04
char buf[256];
cin.getline(buf, 256);
Второй параметр – размер буфера, чтобы избежать переполнения.
5 ноября 2009 в 23:03
#3) Это тоже будет работать до пробела
5 ноября 2009 в 23:03
сканф же кстати тоже до пробела читает вроде? разве нет?
5 ноября 2009 в 23:03
у меня работает с пробелами.ща проверю
точно..
5 ноября 2009 в 23:02
char a;
int i;
while(str1[i-1]!='\n')
{
cin>>a;
str1[i++]=a;
}
Как-то так
5 ноября 2009 в 23:02
почему не катит
char* s = (char*)malloc(sizeof(char)*255);
scanf("%s",s);
?
5 ноября 2009 в 23:02
си++