Я недавно программировал на C, и я хочу знать, как я могу это сделать:
printf("Hello %s" &username);
в C++
cout << "Hello %s" &username;
не работает. Я все еще новенький, так что будьте спокойны.
Это было бы:
cout << "Hello " << username;
Адрес не нужно передавать, поскольку вы пытаетесь напечатать указатель. Вы также можете связывать вызовы, выполняя cout << x1 << x2
что эквивалентно (cout << x1) << x2
. Это работает, потому что результат первого вызова возвращает поток, так что вы снова используете функцию оператора.
Прикованные вызовы такие же, как:
cout << "Hello ";
cout << username;
Вы все еще можете использовать printf в C++, хотя вы должны сделать это правильно.
#include <stdio.h>
int main() {
char username[] = "Slartibartfast";
printf("User: %s\n", username);
return 0;
}
Однако правильный "C++ способ" - это использовать iostream
#include <iostream>
#include <string>
int main() {
std::string username = "Slartibartfast";
std::cout << "User: " << username << '\n';
return 0;
}
Потоки C++ работают в основном с операторами <<
(write to) и >>
(read from), но у них также есть свои собственные функции-члены для выполнения более сложных задач, и есть некоторые вспомогательные функции для таких вещей, как чтение целой строки,
#include <iostream>
#include <string>
int main() {
std::cout << "Enter a username:\n";
std::string username;
std::cin >> username;
if (username.empty()) {
std::cerr << "Empty username was input. Aborting\n";
return 1;
}
std::cout << "Welcome, " << username << std::endl;
std::cout << "Tell me what else you'd like this program to do?\n";
std::string feedback;
std::getline(cin, feedback);
std::cout << "Thank you, you typed " << feedback.size() << " characters of input which I will now ignore.\n";
return 0;
}
Некоторые объяснения:
std
- это пространство имен, в которое помещаются большинство стандартных функций/подпрограмм C++. Это помогает избежать столкновений с определенными пользователем функциями/объектами/переменными.
::
означает "принадлежность", читается справа налево, std::cin
означает cin belonging to std
.
cin
эквивалент stdin
cout
эквивалент stdout
cerr
эквивалентно stderr
endl
- специальный объект, который записывает "\n" и заставляет сбросить выходной буфер.
std::getline
позволяет читать из iostream
в std::string
<<
является сокращением для функции, называемой operator<<
которая принимает iostream и вещь, и возвращает iostream, поэтому вы можете объединить ее:
std::cout << "Hello, " << 42 << " days since last " << adjective << " accident\n";
cout << "Hello " << username << endl;
cout<<"Hello "<<username;
Из-за перегрузки функций вам не нужно указывать, как cout
должен интерпретировать то, что вы передаете. В принципе, существует версия operator<<
перегружена для большинства базовых типов (int
, string
, char
и т.д.). Следовательно, вы можете просто написать
cout << "Hello " << username;