Ik heb wat problemen met een tekenreeksvariabele. Code en de fouten zijn hier: http://pastebin.com/teqcxpzd eventuele gedachten over wat ik verkeerd doe ? Houd het platform ook onafhankelijk. Bedankt!
#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*, ...)’
Antwoord 1, Autoriteit 100%
U mengt C++ en C I / O. In C++ is dit,
#include <string>
#include <iostream>
int main(void)
{
std::string input;
std::cin >> input;
std::cout << input;
return 0;
}
Antwoord 2, Autoriteit 27%
Ik begrijp de vraag om te zijn: hoe maak je een reeksverklaring in C++?
Hier is een kort programma om te demonstreren:
#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;
}
Dus, voeg cstdlib toe aan het begin van je programma. In de praktijk betekent dit het typen van string in plaats van std::string, cout in plaats van std::cout enzovoort. De stringvariabele zelf (in het voorbeeld is de stringvariabele your_name) wordt gedeclareerd met string.
Stel dat je het programma hebt opgeslagen met de bestandsnaam ‘str_example.cpp’
Om het programma te compileren op de opdrachtregel (in Linux):
g++ -o str_example str_example.cpp
Hiermee wordt een uitvoerbaar objectbestand gemaakt met de naam str_example (geen bestandsextensie).
En tot slot, ervan uitgaande dat u zich in dezelfde map bevindt als het programma, om het uit te voeren:
./str_example
De man-pagina voor g++ is uitgebreid, maar wordt niet standaard meegeleverd. Om g++-documentatie te installeren met behulp van de pakketbeheerder van aptitude:
sudo apt-get install gcc-7-doc
Merk op dat de ‘7’ verwijst naar versie 7; de huidige versie op het moment van schrijven. Ik hoop dat dat helpt.
Antwoord 3, autoriteit 18%
kan ‘std::string’ niet converteren naar ‘const
char*’ voor argument ‘1’ tot ‘int
printf(const char*, …)’
input = scanf; //Get input and assign it to variable
U probeert de functieaanwijzeraan scanf
toe te wijzen aan een tekenreeksvariabele. U kunt dat niet doen, daarom krijgt u de eerste foutmelding. De juiste syntaxis zou zijn.
char buffer[BIG_ENOUGH_SIZE];
scanf("%*s", sizeof(buffer) - 1, buffer);
input = buffer;
Maar dat is een zeer C-stijl manier om dingen te doen. De idiomatische manier om input in C++ te lezen is met std::cin >> input
Zoals Nathan heeft voorgesteld.
Kan ‘STD :: string’ niet converteren naar ‘const
char * ‘for argument’ 1 ‘to’ int
PrintF (const char *, …) ‘
printf(input); //Print text
printf
neemt een const char*
als het eerste argument, geen std::string
. U kunt .c_str()
gebruiken om te converteren naar een C-Style-string. Maar Nooit Pass-gebruikersinvoer als het eerste argument voor printf
; De gebruiker kan vervelende dingen doen door %
‘in de tekenreeks te plaatsen. Als u op de C-Style-uitvoer staat, is de juiste syntaxis:
printf("%s", input.c_str());
Maar het C++ – stijlalternatief is std::cout << input;
.