es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo leer una línea en C++

Por favor, ayúdame a leer múltiples enteros de una línea usando múltiples scanf en C++. ¿Es posible o debería usar una función diferente?

Soy un novato en programación, por lo que se agradece una respuesta detallada.

Intenté y de alguna manera descubrí que:

scanf_s(“%d “, &a);
scanf_s(“%d “, &b);

si ingreso en este código
línea1: 3 5
El código puede leer ambos.

Por favor, ayúdeme a resolver el siguiente código.

vector my_vec;
int size;
scanf(“%d “, &size);
for (int k = 0; k<size; k++)=”” {=”” int=”” elements;=”” my_vec[k]=”scanf("%d” “,=”” &elements);=”” }=”” estoy=”” intentando=”” leer=”” una=”” línea=”” donde=”” el=”” primer=”” número=”” es=”” el=”” tamaño=”” del=”” vector=”” y=”” los=”” siguientes=”” enteros=”” son=”” los=”” elementos=”” del=”” vector.=”” por=”” ejemplo,=”” línea:=”” 4=”” 7=”” 9=”” 3=”” 6=”” debería=”” almacenar=””></size;> my_vec = {7, 9, 3, 6};

Cuando probé este código en Visual Studio, simplemente se terminó cuando se ejecutó.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para leer múltiples enteros desde una sola línea en C++, se puede usar la clase std::stringstream para analizar la línea de la siguiente manera:

    #include <iostream>
    #include <sstream>
    #include <vector>
    
    int main() {
      std::string line = "4 7 9 3 6";
      std::stringstream ss(line);
    
      int n;
      ss >> n; // lee el tamaño del vector
    
      std::vector<int> my_vec(n);
      for (int i = 0; i < n; i++) {
        ss >> my_vec[i]; // lee cada elemento en el vector
      }
    
      // imprime el vector para verificar
      for (int i = 0; i < n; i++) {
        std::cout << my_vec[i] << " ";
      }
      std::cout << std::endl;
    
      return 0;
    }
    

    En el código anterior, std::stringstream se usa para analizar la línea como un flujo de caracteres. Luego, se usa el operador >> para extraer cada valor entero del flujo y almacenarlo en el vector.

    También vale la pena señalar que en el código original, my_vec es un vector vacío, por lo que no se puede acceder a él usando el operador []. En su lugar, se debe usar el método push_back() para agregar elementos al vector. Aquí hay una versión actualizada del código que usa push_back():

    #include <iostream>
    #include <vector>
    
    int main() {
      std::vector<int> my_vec;
      int size;
      std::cin >> size;
    
      for (int k = 0; k < size; k++) {
        int element;
        std::cin >> element;
        my_vec.push_back(element);
      }
    
      // imprime el vector para verificar
      for (int i = 0; i < size; i++) {
        std::cout << my_vec[i] << " ";
      }
      std::cout << std::endl;
    
      return 0;
    }
    

    En esta versión del código, my_vec se inicializa como un vector vacío. Se usa el método push_back() para agregar cada elemento al vector a medida que se lee desde la entrada. Es importante tener en cuenta que my_vec[i] no se puede usar para acceder a elementos del vector antes de que se agreguen usando push_back().

Comments are closed.