我有一个非常简单的程序。
#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].
有任何建议如何修复它?
答案 0 :(得分: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;
答案 1 :(得分:0)
'scanf'在stdio.h中定义,这是一个C库而不是c ++库,所以你可以改变 自动输入'char *'到'string'。您可以使用其他输入IO流功能而不是'scanf'。