C++ 如何读取C+中长度可变的格式字符串+;从stdin?

C++ 如何读取C+中长度可变的格式字符串+;从stdin?,c++,io,C++,Io,很抱歉问了这么愚蠢的问题,但我找不到任何明显的答案 我需要先从stdin读取数组大小的intn,然后从带有n元素的格式为“1 2 3 4 5 6”的字符串中读取整数值 如果我知道编译时的参数数量,我可以使用类似于scanf(或安全替代品)的格式字符串,如%d%d%d%d%d“,但这里我只知道运行时的值 在C++中,最好的方法是什么?性能很重要,但比安全更重要

很抱歉问了这么愚蠢的问题,但我找不到任何明显的答案

我需要先从
stdin
读取数组大小的
int
n
,然后从带有
n
元素的格式为“1 2 3 4 5 6”的字符串中读取整数值

如果我知道编译时的参数数量,我可以使用类似于
scanf
(或安全替代品)的格式字符串,如
%d%d%d%d%d“
,但这里我只知道运行时的值

<>在C++中,最好的方法是什么?性能很重要,但比安全更重要

<如何从STDIN?

中读取C++中可变长度的格式字符串? 你不应该试图做这种事。仅使用常量格式字符串

我需要先从stdin读取数组大小的int n,然后读取整数值

在C++中最好的方法是什么?


一次读取一个值。使用循环重复此操作。

这里有一个函数,它执行errorika所描述的操作:

const int SIZE = //as much of your memory as you'd like the user to have access to
***caller function must include this:
   //allocate a string to hold some data;
    char* buffer = NULL;
    buffer = malloc (SIZE * sizeof(char));
    if (buffer == NULL) {
        printf("malloc error terminating\n");
        return;
    }
***
void getEntry(char* buffer) {
    int count = 0;
    int maxlen = SIZE - 1;
    char a = '0';
    for (int i = 0; i < SIZE; i++) {
        buffer[i] = '0';
    }

    while (a != '\n' && count < maxlen) {
            a = fgetc(stdin);
            buffer[count] = a;
            count++;
    }
    if (a == '\n') {
        buffer[count - 1] = '\0';
    }
    else {
        buffer[count] = '\0';
        do {
                a = fgetc(stdin);
        } while (a != '\n');
    }
}
const int SIZE=//您希望用户能够访问的内存量
***调用方函数必须包括以下内容:
//分配一个字符串来保存一些数据;
char*buffer=NULL;
缓冲区=malloc(大小*sizeof(字符));
if(buffer==NULL){
printf(“malloc错误终止\n”);
返回;
}
***
void getEntry(字符*缓冲区){
整数计数=0;
int maxlen=大小-1;
字符a='0';
对于(int i=0;i
这是所有基本的C代码,但用户输入是邪恶的。这里是我提出的C++更多的惯用用户输入函数(查询只是传入的消息字符串):

模板
void getInput(const std::字符串查询、T和entry){
std::字符串输入;
std::cout条目;
}

模板
void getInput2(标准::字符串查询,T和输入){
布尔有效输入=假;
while(validInput==false)
{ 
validInput=true;
std::cout条目;
if(std::cin.fail()){
validInput=假;

STD::打开C++ C++,解释如何使用<代码> STD::GETLION<代码>:STRIGSWATS,并阅读它。<代码> SCANF< <代码>,格式字符串是C,而现代C++应该使用类型安全>代码> STD::GETLION<代码>和代码> STD::ISTIGSTWORKS。我没有选择,我的输入是一个格式的字符串。你可以用我描述的算法读取输入字符串。这是我应该自己定义的模板,还是我想在其中存储解析值的模板?
template<typename T>
void getInput(const std::string query, T& entry) {
    std::string input;
    std::cout << query << std::endl;
    getline(std::cin, input);
    std::stringstream buffer{input};
    buffer >> entry;
}
template<typename T>
void getInput2(std::string query, T& entry) {
    bool validInput = false;
    while (validInput == false)
    { 
        validInput = true;
        std::cout << query << std::endl;
        std::cin >> entry;
        if (std::cin.fail()) {
            validInput = false;
            std::cout << "Unacceptable entry\n" << std::endl;
        }
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
}