格式 '%c' 需要类型为 'char' 的参数

Format '%c' expects argument of type 'char'

本文关键字:char 参数 格式 类型      更新时间:2023-10-16

我收到的错误是:

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=]

我可能缺乏关于c++语言的基本知识,我很抱歉(再一次)问了这个新手问题。此外,如果你能给我反馈或指出我代码中的其他缺陷,我将不胜感激。我的c++代码有什么问题?

#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;
}

如错误信息所示,%cscanf中除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()之前,并用jenisp = read_string();替换scanf("%c",&jenisp);