Ayuda con un programa(DEV C++)

Iniciado por Kurosaki12, 4 Mayo 2010, 22:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Kurosaki12

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;
}

Akai

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.

Kurosaki12

ya intente usar gets pero me marca error en el programa

bizco

Citarya que scanf a la hora de recoger strings sólo lo hace hasta el primer espacio

%[^\n] ahi le lee toda la linea.

Belial & Grimoire

utiliza fgets

fgets(op, sizeof(op), stdin);

y pon opt como char
.                                 

Kurosaki12


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?.



Código (cpp) [Seleccionar]

#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;
}



Horricreu

#6
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