Scanf和c ++中的字符串

时间:2013-10-14 00:39:04

标签: c++ scanf

我有一个非常简单的程序。

#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].

有任何建议如何修复它?

2 个答案:

答案 0 :(得分:1)

你不能scanfstd::string,C函数不知道C ++的实现是什么。您可以使用std::getline

#include <string>
#include <iostream>

std::getline(std::cin, barr[i].fam);

此外,不要将C代码与C ++代码混合使用,如果可能,应避免使用new,而是使用scholar的向量。样本:

std::vector<scholar> barr;

答案 1 :(得分:0)

'scanf'在stdio.h中定义,这是一个C库而不是c ++库,所以你可以改变 自动输入'char *'到'string'。您可以使用其他输入IO流功能而不是'scanf'。