PDA

Visualizza la versione completa : [C] Esercizio con inserimenti di caratteri


Ov3rLo4d
03-06-2008, 16:05
salve a tutti,

questo il testo del problema:



/* Scriver un programma per la conversione in maiuscolo di una
* stringa introdotta da tastiera usando una funzione che converta
* il carattere, se minuscolo.
* Il programma deve leggere e trattare la stringa un
* carattere alla volta, tenendo conto che la stringa
* sara' terminata da un carattere '\n'
*/


e fino qui ci siamo:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_STRINGA 100

char *maiuscolo(void);
char normale[MAX_STRINGA],maiusc_normale[MAX_STRINGA];

int i;

main()
{
printf("scrivi cio' che vuoi; per terminare b-slash n:\n\n");
scanf("%s",normale);
printf("\n\n%s\n\n\n",maiuscolo());
system("pause");
}

char *maiuscolo(void)
{
for(i=0;i<strlen(normale);i++)
{
if(islower(normale[i]))
maiusc_normale[i]=toupper(normale[i]);
else
maiusc_normale[i]=normale[i];
}

return (maiusc_normale);
}


Ora per voi ho due domande:

1- Come faccio a far terminare il programma con il comando \n??
2- Finita di creare la funzione che controlla i caratteri all'inizio non avevo messo il puntatore davanti alla funzione e non mi andava poi per caso sono riuscito a trovare sto errore ma non ho capito come mai ci va il puntatore davanti alla funzione??

Grazie a tutti

oregon
03-06-2008, 16:18
Non ho capito nessuna delle due domande ...

Non so perche' hai indicato che bisogna terminare con il tasto b-slash ... mi sembra che l'esercizio indichi solamente il tasto 'return' ...

E il codice funziona ...

Non capisco proprio ...

Ov3rLo4d
03-06-2008, 16:59
nel testo del problema c' scritto questo:

tenendo conto che la stringa
sara' terminata da un carattere '\n'


come faccio a far terminare la stringa con un \n?? cosa vuol dire??




la seconda domanda mi sembra chiara, chiedo cosa serve mettere il puntatore davanti alla funzione... stato un caso fortuito averlo messo... ma non ho capito qundo si devono mettere i puntatori...

LeleFT
03-06-2008, 17:11
Originariamente inviato da Ov3rLo4d
nel testo del problema c' scritto questo:

tenendo conto che la stringa
sara' terminata da un carattere '\n'


come faccio a far terminare la stringa con un \n?? cosa vuol dire??
\n il carattere RETURN (o INVIO, che dir si voglia).
\t il carattere TAB
\r il ritorno carrello

Il backslash serve ad effettuare il "quoting" del carattere... e quelli che ho elencato io sono dei "quoting" particolari, perch rappresentano dei caratteri speciali (non stampabili, oltretutto)...


la seconda domanda mi sembra chiara, chiedo cosa serve mettere il puntatore davanti alla funzione... stato un caso fortuito averlo messo... ma non ho capito qundo si devono mettere i puntatori...
La tua funzione deve restituire una stringa... che cos' una stringa in C? Risposta: un array di caratteri... e come si rappresentano gli array di caratteri? Risposta: tramite un puntatore a carattere...


Ciao. :ciauz:

Ov3rLo4d
03-06-2008, 17:15
Grazie... penso di aver capito gi qualcosa in pi :D

810106
04-06-2008, 01:45
Con il termine `terminare il programma con '\n'' intendi premendo invio?
se si basta che sostituisci

system("pause");
con:


/* Linux converte CR in NL */
/* Windows ? */
do {
i = getchar();
} while(i != 0x0a && i != 0x0d);
/* 0x0a corrisponde al valore ascii del carattere `\n'
* 0x0d corrisponde al valore ascii del carattere '\r' */


Una cosa se mi posso permettere:


#define MAX_STRINGA 100
char normale[MAX_STRINGA];
...
int main(int argc, char **argv)
{
...
scanf("%s",normale);
...
}

Cosa succede se immetto una stringa piu lunga di cento caratteri? segmentation fault!
usa
fgets(normale, sizeof(normale) - 1, stdin); al posto
di scanf per risolvere il problema.

sotoli
04-06-2008, 12:43
Ciao, potresti anche includere nel programma la libreria iostream:


#include <iostream>

e invece di utilizzare:


scanf("%s",normale);

usare questo:


std::cin.get(normale, MAX_STRINGA);

LeleFT
04-06-2008, 12:46
Originariamente inviato da sotoli
Ciao, potresti anche includere nel programma la libreria iostream:


#include <iostream>

e invece di utilizzare:


scanf("%s",normale);

usare questo:


std::cin.get(normale, MAX_STRINGA);

Stiamo parlando di C non di C++...


Ciao. :ciauz:

810106
04-06-2008, 12:51
:oVVoVe: SI ma con il C non puoi usare le librerie C++!

oregon
04-06-2008, 13:52
E comunque, iostream e' un include non una libreria ...

Loading