如何在C++中使用scanf扫描字符串

wrrgggsh  于 2023-02-10  发布在  其他
关注(0)|答案(3)|浏览(217)

我已经尝试了大部分字符串和字符格式类型,他们不工作,我不知道为什么。以下是我的代码:

#include <iostream>
#include <stdio.h>

using namespace std;
int main(int argc, const char * argv[])
{

    // insert code here...
    string string2;
    string string;

    cout << "Hello, World!\n";
    printf("Hi my name is Josh %s\n",string2);
    scanf("%s",&string);
    printf("hi %s",string);
}
vc9ivgsu

vc9ivgsu1#

你所显示的(scanf("%s",&string);)不起作用(而且永远不可能,例如,通过给出不同的格式说明符)!
%s说明符一起使用的scanf()需要一个引用原始char[]数组的对应char*指针,以接收参数列表中的读取数据。不过,您在示例中传递的std::string指针不提供对引用的std::string示例的自动强制转换(内部管理char[]缓冲区)。
您可以尝试改用&string.front(),但我并不真正推荐您这样做,除非您非常确定自己在做什么。
对于c++,最好使用std::cin
改为std::istream& operator>>(std::istream&, const std::string&)

std::cout << "Put in string value:" << std::endl;
std::string input;
std::cin >> input;

(顺便说一句,xcode与您的问题无关!)

omhiaaxx

omhiaaxx2#

你不应该把std::cout::printf混在一起。最好使用C++ Standard IO library而不是stdio中的C函数。
您的代码应该看起来有点像这样:

#include <iostream>

int main()
{
    std::string string2;
    std::string other_string;

    std::cout << "Hello, World!\n";
    std::cout << "Hi my name is Josh " <<  string2 << '\n';
    std::cin >> other_string;
    std::cout << "hi " << other_string;
}
zzoitvuj

zzoitvuj3#

int carac;
char curr[20];
cout << "dime tu nombre: ";
scanf("%[^\n]s", curr);
while ((carac = getchar()) != '\n' && carac !=EOF );    
cout << "ah, te llamas: " << curr;

相关问题