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

标签 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;
}

最佳答案

正如错误信息所说,%c in scanf except char* argument and will store one character there。它不会接受 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++ - 格式 '%c' 需要类型为 'char' 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129228/

相关文章:

c++ - 编译器在不需要时关心复制构造函数

c++ - 像 JAXB 一样在 QT 中生成 XML

python - 使用 pybind11,如何将我的代码拆分为多个模块/文件?

c++ - 内存问题,新的和免费的等(C++)

C++ 重载方法与虚拟继承的绑定(bind)

c++ - 用纯虚方法覆盖(常规)虚方法有什么影响?

c++ - 出现 'bad_weak_ptr' 错误

c++ - 如何动态创建类对象?

c++ - P/Invoke,麻烦查找/声明函数入口点

c++ - 在函数顶部声明的变量和后面声明的变量之间的区别