我的程序总是在类函数中的第5次scanf后崩溃。
class PersoenlicheDaten{
public:
void eingabe(){
printf("Bitte geben sie jetzt ihre Persoenlichen Daten ein: \n\n");
printf("Vorname: ");
scanf("%s", &vorname);
printf("Nachname: ");
scanf("%s", &nachname);
printf("Alter: ");
scanf("%d", &alter);
printf("Geburtsdatum: ");
scanf("%s", &geburtsdatum);
printf("Addresse: ");
scanf("%s", &addresse);
}
private:
std::string vorname;
std::string nachname;
int alter;
std::string geburtsdatum;
std::string addresse;
};
内部main
:
do{
pd.eingabe();
printf("Sind sie mit der eingabe zufrieden?\n\n");
printf("Antwort(j/n): ");
scanf("%c", &v.antwiederholen);
if(v.antwiederholen == 'j'){
v.running = true;
}else{
v.running = false;
}
}while(v.running);
为什么这是因为它应该正常工作。另外,我想使用scanf而不是std :: cin来学习不同的输入方法。
答案 0 :(得分:0)
此处的问题是您无法使用RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.mydomain$ [NC]
RewriteCond %{REQUEST_URI} ^/?ru(/.*)?$ [NC]
RewriteCond %{REQUEST_URI} !^/?ru/sitemap.*$ [NC]
RewriteRule ^/?ru(/(.*))?$ https://ru.mydomain.com/$2 [R=301,L]
来阅读scanf
。您必须将std::string
转换为std::string
,或使用char *
。您可以做的另一件事是首先从scanf读取到临时cin
,然后通过执行以下操作将其转换为char *
:
std::string
作为评论,试图学习如何使用不同的东西没有错。 scanf("%s", &someCharPointer);
std::string s = someCharPointer;
和scanf
都有自己的冒险和不懈。
答案 1 :(得分:0)
要使用scanf读取字符串,您实际上必须具有足够大的缓冲区才能读取字符串。
char temp[100];
std::string vorname;
if(scanf("%99s", temp) ==1){
vorname = temp;
}
使用scanf,您必须限制要读取的字符数以匹配临时缓冲区,并在使用缓冲区读取之前检查返回值。使用getline或运算符从istream中读取>>直接进入std :: string - 你的字符串变量将增长以匹配用户输入