Nesecito que alguien me ayude con este programa, no se como hacer para que al ingresar el nombre al registro me acepte espacios.
porfavor alguien que me ayude.
gracias
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
char nombre[5][50];
int r, c, op;
char opc;
for (r=0; r<=4; r++)
for (c=0; c<=49; c++)
nombre[r][c]=' ';
cout << "Registros disponibles: ";
for (r=0; r<=4; r++)
if(nombre[r][0]==' ')
printf("%i ", r+1);
if (nombre[0][0]!=' ' && nombre[1][0]!=' ' && nombre[2][0]!=' ' && nombre[3][0]!=' ' && nombre[4][0]!=' ' )
printf("Ninguno");
else
cout << endl;
do{
printf("Que registro desea editar (1 - 5): ");
scanf("%i", &op);
switch (op){
case 1:
if (nombre[0][0]==' ')
{printf("Teclea el nombre a ingresar: ");
scanf("%s", nombre[0]);}
else
printf("Registro ya ocupado por: %s \n", nombre[0]);
break;
case 2:
if (nombre[2][0]!=' ')
printf("Registro ya ocupado por: %s \n", nombre[1]);
else
printf("Teclea el nombre a ingresar: "), scanf("%s", nombre[1]);
break;
case 3:
if (nombre[3][0]!=' ')
printf("Registro ya ocupado por: %s \n", nombre[2]);
else
printf("Teclea el nombre a ingresar: "), scanf("%s", nombre[2]);
break;
case 4:
if (nombre[3][0]!=' ')
printf("Registro ya ocupado por: %s \n", nombre[3]);
else
printf("Teclea el nombre a ingresar: "), scanf("%s", nombre[3]);
break;
case 5:
if (nombre[4][0]!=' ')
printf("Registro ya ocupado por: %s \n", nombre[4]);
else
printf("Teclea el nombre a ingresar: "), scanf("%s", nombre[4]);
break;
default: cout<< "Has ingresado un dato erroneo\n";
}
cout << endl << "Deceas ingresar otro registro (S=Si,N=No):", cin >> opc;
} while(opc=='S' || opc=='s');
cout << endl;
cout << endl;
cout << opc;
system("pause");
return 0;
}
No hace falta que lo vuelvas a repetir en otro post si ya lo pusiste.
En vez de scanf, utiliza otra funcion, ya que scanf a la hora de recoger strings sólo lo hace hasta el primer espacio. gets creo que sería, pero tenía sus defectos.
ya intente usar gets pero me marca error en el programa
Citarya que scanf a la hora de recoger strings sólo lo hace hasta el primer espacio
%[^\n] ahi le lee toda la linea.
utiliza fgets
fgets(op, sizeof(op), stdin);
y pon opt como char
Si pongo automaticamente la opcion (op) en 1 (o en cualquier otro) si me permite ingresar caracteres con espacios ("%[^\n]"), en pocas palabras al hacer la pregunta de cual registro se desea modificar es cuando surgen los problemas. Pero no lo he resuelto ¿como plantear la pregunta adecuadamente?.
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main() {
char nombre[5][50];
int r, c, pre;
int op;
for (r=0; r<=4; r++)
for (c=0; c<=0; c++)
nombre[r][c]='0';
nombre[0][1]='\0';
nombre[1][1]='\0';
nombre[2][1]='\0';
nombre[3][1]='\0';
nombre[4][1]='\0';
do{
cout << endl << "Registros disponibles: ";
for (r=0; r<=4; r++)
if(nombre[r][0]=='0')
printf("%i ", r+1);
if (nombre[0][0]!='0' && nombre[1][0]!='0' && nombre[2][0]!='0' && nombre[3][0]!='0' && nombre[4][0]!='0' )
printf("Ninguno");
else
cout << endl;
op=1;
switch (op){
case 1:
if (nombre[0][0]=='0')
{printf("Teclea el nombre a ingresar: ");
scanf("%[^\n]", nombre[0]);}
else
cout << "Registro ya ocupado por: " << nombre[0];
break;
case 2:
if (nombre[1][0]=='0')
{printf("Teclea el nombre a ingresar: ");
scanf("%[^\n]", nombre[1]);}
else
cout << "Registro ya ocupado por: " << nombre[1];
break;
case 3:
if (nombre[2][0]=='0')
{printf("Teclea el nombre a ingresar: ");
scanf("%[^\n]", nombre[2]);}
else
cout << "Registro ya ocupado por: " << nombre[2];
break;
case 4:
if (nombre[3][0]=='0')
{printf("Teclea el nombre a ingresar: ");
scanf("%[^\n]", nombre[3]);}
else
cout << "Registro ya ocupado por: " << nombre[3];
break;
case 5:
if (nombre[4][0]=='0')
{printf("Teclea el nombre a ingresar: ");
scanf("%[^\n]", nombre[4]);}
else
cout << "Registro ya ocupado por: " << nombre[4];
break;
default: cout<< "Has ingresado un dato erroneo\n";}
cout << endl;
cout << "Desea modificar otro registro?\nSi(1)\nNo(0)", cin >> pre;
}while (pre==1);
cout << endl << "Los registros quedaron de la siguiente manera: " << endl;
cout << "Registro 1: " << nombre[0] << endl;
cout << "Registro 2: " << nombre[1] << endl;
cout << "Registro 3: " << nombre[2] << endl;
cout << "Registro 4: " << nombre[3] << endl;
cout << "Registro 5: " << nombre[4] << endl;
cout << endl;
cout << endl;
system("pause");
return 0;
}
scanf() (http://www.cplusplus.com/reference/clibrary/cstdio/scanf/):
Citarscanf type specifiers:
Type: s
Qualifying input: string of characters. This will read subsequent characters until a whitespace is found (whitespace characters are considered to be blank, newline and tab).
Type of argument: char *
En resumen, utiliza
%s.
Saludos :P