C++ 格式';%c';应为类型为';char';

C++ 格式';%c';应为类型为';char';,c++,C++,我收到的错误是: program3.cpp:13:21: warning: format ‘%c’ expects argument of type ‘char*’, but argument 2 has type ‘std::string* {aka std::basic_string<char>*}’ [-Wformat=] program3.cpp:13:21:警告:格式“%c”要求参数类型为“char*”,但参数2的类型为“std::string*{aka std::bas

我收到的错误是:

program3.cpp:13:21: warning: format ‘%c’ expects argument of type ‘char*’, but argument 2 has type ‘std::string* {aka std::basic_string<char>*}’ [-Wformat=]
program3.cpp:13:21:警告:格式“%c”要求参数类型为“char*”,但参数2的类型为“std::string*{aka std::basic_string*}”[-Wformat=]
我可能缺少关于C++语言的一个非常基础的知识,我为再次问这个问题而道歉。如果您能提供反馈或指出我代码中的其他缺陷,我将不胜感激。 我的C++代码有什么错误?< /P>
#include <iostream>
#include <stdio.h>
using namespace std;
int main(){
    int harga=20000;
    int diskon;
    char pelanggan;
    string jenisp;
    printf("Apakah Pelanggan : [Y/N]");
    scanf("%c",&pelanggan);
    if(pelanggan=='Y'){
        printf("Apa Jenis Pelanggan [Emas,Perak,Perunggu]:");
        scanf("%c",&jenisp);
        if(jenisp=="Emas"){
            diskon=harga-(0.5*harga);
            printf("Harga untuk pelanggan kartu Emas adalah : %d",diskon);
        }
        else if(jenisp=="Perak"){
            diskon=harga-(0.25*harga);
            printf("Harga untuk pelanggan kartu Perak adalah : %d",diskon);
        }
        else if(jenisp=="Perunggu"){
            diskon=harga-(0.1*harga);
            printf("Harga untuk pelanggan kartu Perunggu adalah : %d",diskon);
        }
    }
    else{
        printf("Harga untuk bukan pelanggan adalah : %d",harga);
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
国际价格=20000;
int diskon;
查尔·佩朗根;
字符串jenisp;
printf(“Apakah Pelanggan:[是/否]”);
scanf(“%c”和pelanggan);
如果(pelanggan=='Y'){
printf(“Apa Jenis Pelanggan[Emas,霹雳州,佩鲁古]:”;
scanf(“%c”&jenisp);
如果(jenisp==“Emas”){
diskon=harga-(0.5*harga);
printf(“向穷人收费:%d”,diskon);
}
否则如果(jenisp==“霹雳州”){
diskon=harga-(0.25*harga);
printf(“向穷人收费:%d”,diskon);
}
否则如果(jenisp==“Perunggu”){
diskon=harga-(0.1*harga);
printf(“价格为%d”,diskon);
}
}
否则{
printf(“价格为%d”,哈尔加);
}
返回0;
}

正如错误消息所说,
%c
scanf
参数中,除了
char*
之外,将在那里存储一个字符。它不接受
std::string*

使用此功能可能有助于学习

std::string read_string() {
    char buffer[10000]; // allocate enough memory
    if(scanf("%9999s", buffer) == 1) {
        // successfuly read something
        return buffer;
    } else {
        return "";
    }
}

要使用它,请将它粘贴到
int main()
之前,并替换
scanf(“%c”,&jenisp)带有
jenisp=read_string()

不能用C函数读入
std::string
。为什么使用C++类型而不是C函数?选择一种语言(然后用该语言标记此问题)。@LightnessRacesinOrbit:youcan:
std:strings(101,”;scanf(“%100s”、&s[0]);s、 调整大小(100)
@alk:只满足“读入
std::string
”这一相当弱的定义:P@R_Kapp非常感谢。编辑。