文字列変数の宣言に問題があります。コードとエラーはここにあります: http://Pastebin.com/TEQCxpZd 私が間違っていることについて何か考えはありますか?また、プラットフォームに依存しないようにしてください。ありがとう!
#include <stdio.h>
#include <string>
using namespace std;
int main()
{
string input; //Declare variable holding a string
input = scanf; //Get input and assign it to variable
printf(input); //Print text
return 0;
}
Getting this from GCC:
main.cpp: In function ‘int main()’:
main.cpp:53:10: error: invalid conversion from ‘int (*)(const char*, ...)’ to ‘char’
main.cpp:53:10: error: initializing argument 1 of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]’
main.cpp:54:14: error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int printf(const char*, ...)’
C++とcI/Oを混在させています。 C++では、これは、
#include <string>
#include <iostream>
int main(void)
{
std::string input;
std::cin >> input;
std::cout << input;
return 0;
}
私は質問を理解しています:C++で文字列宣言をどのように行うのですか?これがデモンストレーションする短いプログラムです:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
string your_name;
cout << "Enter your name: ";
cin >> your_name;
cout << "Hi, " << your_name << "!\n";
return 0;
}
したがって、プログラムの開始時にcstdlibを含めます。実際には、これはstd :: stringの代わりにstringを入力し、std :: coutの代わりにcoutを入力することを意味します。文字列変数自体(この例では、文字列変数はyour_name)はstringで宣言されています。
プログラムをファイル名「str_example.cpp」で保存したとしましょう。コマンドラインでプログラムをコンパイルするには(Linuxの場合):
g++ -o str_example str_example.cpp
これにより、str_example(ファイル拡張子なし)という実行可能オブジェクトファイルが作成されます。そして最後に、プログラムと同じディレクトリにいると仮定して、それを実行します。
./str_example
G ++のマニュアルページは広範ですが、デフォルトでは含まれていません。 aptitudeパッケージマネージャーを使用してg ++ドキュメントをインストールするには:
Sudo apt-get install gcc-7-doc
「7」はバージョン7を指すことに注意してください。執筆時点での現在のバージョン。お役に立てば幸いです。
引数「1」の「std :: string」を「constchar *」から「intprintf(const char *、...)」に変換できません
_input = scanf; //Get input and assign it to variable
_
関数ポインタをscanf
に文字列変数に割り当てようとしています。それはできません。そのため、最初のエラーが発生します。適切な構文は次のようになります。
_char buffer[BIG_ENOUGH_SIZE];
scanf("%*s", sizeof(buffer) - 1, buffer);
input = buffer;
_
しかし、それは非常にCスタイルのやり方です。 C++で入力を読み取る慣用的な方法は、ネイサンが提案したように_std::cin >> input
_を使用することです。
引数「1」の「std :: string」を「constchar *」から「intprintf(const char *、...)」に変換できません
_printf(input); //Print text
_
printf
は、_const char*
_ではなく、最初の引数として_std::string
_を取ります。 .c_str()
を使用して、Cスタイルの文字列に変換できます。しかし決してユーザー入力を最初の引数としてprintf
に渡します。ユーザーは、文字列に_%
_を入れることで、厄介なことを行うことができます。 Cスタイルの出力を主張する場合、正しい構文は次のとおりです。
_printf("%s", input.c_str());
_
ただし、C++スタイルの代替手段は_std::cout << input;
_です。