Requisitos:
Cuando no sabemos cuántos valores nos escribirán por el teclado usamos la siguiente instrucción:
while (cin>>valor) {
...
}
Lo que esto hace es ir leyendo valores del teclado hasta que el usuario presione CTRL+Z en Windows o CTRL+D en MacOS y Linux (o, si se está leyendo un archivo, hasta que se llegue al final del archivo). Por ejemplo:
int suma = 0;
int num;
while (cin >> num) {
suma = suma + num;
}
cout << suma << endl;
Podemos leer más de un valor con el cin dentro de la condición del while:
int nota;
string alumno;
while (cin >> alumno >> nota) {
cout << "El/La " << alumno << " ha obtenido un " << nota << endl;
}
Es muy habitual utilizar la fórmula “while(cin)” para rellenar un vector cuando no sabemos cuantos valores introducirá el usuario:
vector<int> paises_visitados;
string pais;
while (cin >> pais) {
paises_visitados.push_back(pais);
}
Comentarios
y si despues del while cin quiero que continue el programa?
y si despues del while cin quiero que continue el programa? por ejemplo operar luego con este vector como le digo que ya no quiero inserir mas datos si tampoco tengo una centinela que ponga un limite?
Re: Continuar programa
Hola, Albert.
El programa saldrá del bucle while(cin) cuando ya no queden más datos por leer, es decir, cuando se llegue al final del fichero si se está leyendo datos de un fichero o cuando el usuario indique que se acaba la entrada (por ejemplo, presionando control+Z en terminales Windows o control+D en terminales Linux). El código que pongas después del bucle se ejecutará en ese momento y ahí podrás procesar toda la entrada.
Hay que decir que en el contexto de la programación competitiva la razón por la que hay que saber hacer este tipo de bucles es porque en varios jueces online (en particular jutge.org, que alberga muchos problemas de ediciones de la OIE anteriores) la entrada viene dada por varios casos (sin especificar cuántos) que hay que tratar por separado, así que lo que se hace es un bucle while(cin) en el que en cada iteración se trata un caso de entrada. En esta situación no hay que hacer nada después de salir del while(cin).
terminar programa
#include <iostream>
#include <vector>
using namespace std;
bool Primo(int n)
{
if(n==0 || n==1 || n==4) return false;
for(int i=2;i<n/2;i++)
{
if(n%i==0)return 0;
}
return true;
}
int main()
{
//vector<int> res;
int a,b,n,c;
int cont=0;
while(cin>>a>>b>>n)
{
if(!a)
break;
cont=0;
if(n==1 && Primo(a)==true)
{
cout<<a;
}
else
{
while(true)
{
c=a;
if(Primo(c)==true){
cont++;
}
a=c+b;
if(cont==n)
break;
}
cout<<c;
}
}
return 0;
}
//LO MALO ES QUE AUN SIGUE PIDIENDO DATOS CUANDO TERMINO DE INSERTARLOS
Re: terminar programa
Hola,
Para que el programa deje de leer la entrada, tienes que indicarle que se ha acabado la entrada de algún modo (Control+Z o Control+D sirven en la mayoría de terminales). Creo que el tema de leer la entrada tu programa lo hace bien.
Una cosa que le pasa a tu programa es que entra en bucles infinitos (por ejemplo, cuando a y b no son coprimos). No sé si esa es tu intención...
Añadir nuevo comentario