C++ 中的 scanf 和字符串

Scanf and strings in c++

本文关键字:字符串 scanf 中的 C++      更新时间:2023-10-16

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

#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*"键入为"字符串"。您可以使用其他输入 IO 流函数,而不是"scanf"。