Я только недавно начал работать над scanf и printf в целом, и в своих исследованиях и в общих чертах я несколько раз сталкивался с проблемой в своем коде, поэтому решил сделать тест и успешно реплицировали ошибку.scanf проблемы с использованием ввода строки и сравнения строк
#include <string>
#include <string.h>
#include <stdio.h>
int main(){
std::string name;
std::string name2;
printf("Print donald or larry: ");
scanf("%s",name);
if(strcmp(name.c_str(), "donald") == 1){
printf("You entered donald");
goto stop;
}else{
printf("You entered larry");
goto stop;
}
stop:
return 0;
}
при попытке компиляции кода он бросает меня ошибка идет от линии 10
ошибка:
error: cannot pass objects of non-trivially-copyable type 'std::string {aka
class std::basic_string<char>}' through '...'|
Источник:
scanf("%s", name);
Я попытался как name.c_str
и &name
, и оба они не работают, name.c_str
м akes ошибка if if и не работает, но &name
просто падает вообще, хотя я обнаружил, что &<variable>
работает только с целыми числами.
Что я делаю неправильно?
'if (strcmp (name.c_str()," donald ") == 1) {' Nope. – John3136
C или C++. Выберите один, оставьте другой. Если вы хотите C++, попробуйте ['cout' и' cin'] (http://www.cplusplus.com/doc/tutorial/basic_io/). – e0k
Определите, являетесь ли вы кодировкой на C или C++. Если C, scanf круто, но забудьте 'string'. Если C++, 'string' в порядке, но не более scanf:' std: cin >> name; ' – rici