Scanf и строки в C ++

0

У меня действительно простая программа.

#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

2 ответа

1
Лучший ответ

Вы не можете 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;
  • 0
    Спасибо за вашу помощь, но я должен использовать только простые массивы вместо векторов. Кроме того, мне нужно ввести все 3 вещи (число, fam и ocen) в 1 строку, я знал, как это сделать всего с 1 scanf, но как я могу сделать это с 2 scanf и 1 getline? Заранее спасибо.
  • 0
    см. en.cppreference.com/w/cpp/string/basic_string/getline
0

"scanf" определяется в stdio.h, который является библиотекой C, а не библиотекой c++, поэтому вы можете автоматически преобразовать тип "char *" в "string". Вы можете использовать другую функцию ввода IO-потока, а не "scanf".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню