格式'%c'期待类型' char'

时间:2015-10-14 15:15:52

标签: 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=]

我可能缺乏关于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;
}

1 个答案:

答案 0 :(得分:2)

正如错误消息所示%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();