Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Kurosaki12 en 4 Mayo 2010, 22:09 PM

Título: Ayuda con un programa(DEV C++)
Publicado por: Kurosaki12 en 4 Mayo 2010, 22:09 PM
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;
}
Título: Re: Ayuda con un programa(DEV C++)
Publicado por: Akai en 4 Mayo 2010, 22:18 PM
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.
Título: Re: Ayuda con un programa(DEV C++)
Publicado por: Kurosaki12 en 4 Mayo 2010, 22:20 PM
ya intente usar gets pero me marca error en el programa
Título: Re: Ayuda con un programa(DEV C++)
Publicado por: bizco en 5 Mayo 2010, 00:17 AM
Citarya que scanf a la hora de recoger strings sólo lo hace hasta el primer espacio

%[^\n] ahi le lee toda la linea.
Título: Re: Ayuda con un programa(DEV C++)
Publicado por: Belial & Grimoire en 5 Mayo 2010, 01:39 AM
utiliza fgets

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

y pon opt como char
Título: Re: Ayuda con un programa(DEV C++)
Publicado por: Kurosaki12 en 5 Mayo 2010, 17:51 PM

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


Título: Re: Ayuda con un programa(DEV C++)
Publicado por: Horricreu en 5 Mayo 2010, 18:01 PM
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