C++ 如何播放具有特定名称的音频

C++ 如何播放具有特定名称的音频,c++,C++,我想播放具有特定名称的音频文件,例如,如果用户输入数字3,我想让代码播放名称为3.wav的音频文件 string a; cin >> a; PlaySound(TEXT("C:/Users/Name/Desktop/" && a && ".wav"), NULL, SND_SYNC); 这当然行不通。有什么建议吗?或者我必须编写多个IFs吗?因为

我想播放具有特定名称的音频文件,例如,如果用户输入数字3,我想让代码播放名称为3.wav的音频文件

           string a;
           cin >> a;
           PlaySound(TEXT("C:/Users/Name/Desktop/" && a && ".wav"), NULL, SND_SYNC);

这当然行不通。有什么建议吗?或者我必须编写多个IFs吗?

因为
a
std::string
(而不是
std::wstring
)您可能应该在Windows中使用ANSI API(
PlaySoundA

您可以这样做:

#include <windows.h>

#include <iostream>
#include <string>

int main() {
    std::string a;

    if(std::getline(std::cin, a)) { // getline lets you enter filenames containing spaces
        PlaySoundA(("C:/Users/Name/Desktop/" + a + ".wav").c_str(), nullptr, SND_SYNC);
    }
}
  • +
    连接
    std::string
    s,而不是
    &
    。注意这只适用于
    std::string
    s。如果尝试将字符数组与+,程序将执行指针算术
  • 如果您使用的是Window的宽字符API,则整个应用程序都需要宽字符。这意味着您可以使用
    std::wstring
    std::wcin
    L
    前缀来指定宽字符串文本
  • 避免使用
    文本
    宏<代码>文本是一种快速的方法,可以轻松地将程序从早期使用8位字符的Windows操作系统移植到基于Windows NT的操作系统,这些操作系统更喜欢使用宽字符以简化国际化<如果设置了UNICODE标志,则在编译时使用code>TEXT将
    char
    字符串文字转换为
    wchar
    字符串文字,方法是在
    L
    前缀前加前缀。Windows XP在21世纪初淘汰了所有较旧的Windows操作系统,从那时起,最好在整个系统中使用宽字符
  • std::wstring a;
    //^所有内容都必须是宽字符
    std::wcin>>a;
    //^甚至cin
    PlaySoundW((L“C:/Users/Name/Desktop/“+a+L.wav”).C_str(),NULL,SND_SYNC);
    //零歧义。仅限宽字符。
    //^从wstring获取wchar数组
    //^^宽字符串文字
    
    标准C++对播放音频文件没有任何概念。 & & >代码>运算符不是C++中的字符串连接。你的意思很可能是
    +
    。克里斯,答案有用吗?
    int main() {
        std::string a;
    
        if(std::getline(std::cin, a)) {
            std::string wavpath = "C:/Users/Name/Desktop/" + a + ".wav";
            std::cout << "Playing " << wavpath << '\n';
    
            if(PlaySoundA(wavpath.c_str(), nullptr, SND_SYNC) == FALSE) {
                std::cout << "Failed playing sound\n";
            }
        }
    }