У меня действительно простая программа.
#include <stdio.h>
#include <string>
using namespace std;
struct scholar{
int number;
string fam;
int ocen;
};
int main(){
int len;
printf("vvedite n");
scanf("%d", &len);
scholar *barr= new scholar[len];
for(int i=0; i<len; i++){
printf("Nomer studenta ");
scanf("%d", &barr[i].number);
printf("\nFamilia ");
scanf("%s", barr[i].fam);
printf("\nOcenka");
scanf("%d", &barr[i].ocen);
}
delete [] bar;
Но на линии, где я хочу ввести семью, есть предупреждение:
warning: format specifies type 'char *' but the argument has type 'string'
(aka 'basic_string<char>') [-Wformat].
Любое предложение, как его исправить?
Вы не можете scanf
в std::string
, функция C не знает, что такое C++. Вы можете использовать std::getline
#include <string>
#include <iostream>
std::getline(std::cin, barr[i].fam);
Кроме того, не смешивайте код C с кодом C++ и избегайте new
если это возможно, используйте вместо этого вектор scholar
. Для образца:
std::vector<scholar> barr;
"scanf" определяется в stdio.h, который является библиотекой C, а не библиотекой c++, поэтому вы можете автоматически преобразовать тип "char *" в "string". Вы можете использовать другую функцию ввода IO-потока, а не "scanf".