Autor
|
Tema: Ayuda con un programa(DEV C++) (Leído 3,483 veces)
|
Kurosaki12
Desconectado
Mensajes: 13
|
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; }
|
|
|
En línea
|
|
|
|
Akai
Desconectado
Mensajes: 823
|
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.
|
|
|
En línea
|
|
|
|
Kurosaki12
Desconectado
Mensajes: 13
|
ya intente usar gets pero me marca error en el programa
|
|
|
En línea
|
|
|
|
bizco
Desconectado
Mensajes: 698
|
ya que scanf a la hora de recoger strings sólo lo hace hasta el primer espacio %[^\n] ahi le lee toda la linea.
|
|
|
En línea
|
|
|
|
Belial & Grimoire
Desconectado
Mensajes: 559
Tea_Madhatter
|
utiliza fgets
fgets(op, sizeof(op), stdin);
y pon opt como char
|
|
|
En línea
|
.
|
|
|
Kurosaki12
Desconectado
Mensajes: 13
|
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; }
|
|
|
En línea
|
|
|
|
Horricreu
Wiki
Desconectado
Mensajes: 290
¡La verdad os hará libres!
|
scanf(): scanf 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
|
|
« Última modificación: 24 Octubre 2010, 13:17 pm por Horricreu »
|
En línea
|
|
|
|
|
|