[CODE] Problemi con scanf e funzioni

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
icp
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 409
Iscrizione: martedì 16 settembre 2008, 16:08
Località: Milano

[CODE] Problemi con scanf e funzioni

Messaggio da icp »

Ciao!
Vi posto un altro piccolo problema con il c.
Devo fare un programma che riceve dall'utente una stringa e un carattere e tramite un sottoprogramma mi dice se è presente un dato carattere e la sua posizione (la prima nel caso).
Il problema è che fatta la prima scanf (sulla stringa) il programma termina non permettendomi di fare la seconda!

Codice: Seleziona tutto

#include <stdio.h>
#define N 10
int posizioneCarattere(char[], char);

void main(){
	int i;
	char c;
	char str[N];
	int pos;
	printf("Hey brother inserisci una stringa:\n");
	for(i=0; i<N; i++){
		scanf("%s",&str[i]);
	}
	printf("Inserisci il carattere da controllare:\n");
	scanf("%c",&c);
	pos = posizioneCarattere(str, c);
	if(pos==-1)
		printf("Carattere non presente.\n");
	else
		printf("Il carattere richiesto e' presente alla posizione %d.\n", pos);
}
int posizioneCarattere(char str[], char c){
	int pos, i;
	char stringa[N], car;
	int ok=0;
	for(i=0; i<N; i++){
		if(c==str[i])
			pos=i;
			ok=1;
			break;
	}
	if(ok=1)
		return i;
	else
		return -1;
}
Io ci sto pensando ma se qualcuno che legge il post trova l'errore e me lo dice gli offro una birra! :P
Linux User #486360
Ubuntu User # 26456
Avatar utente
rpadovani
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3434
Iscrizione: lunedì 8 dicembre 2008, 19:49
Desktop: GNOME Shell
Distribuzione: Ubuntu 18.04 x86_64
Sesso: Maschile
Località: Munich, Germany
Contatti:

Re: [CODE] Problemi con scanf e funzioni

Messaggio da rpadovani »

Scusami, lo scanf è completamente sbagliato. Perché fai un ciclo? In questo modo tu stai leggendo N stringhe, e salvi ogni stringa in una posizione di memoria ben specifica, andando fra l'altro a sovrascrivere varie celle.
Se vuoi leggere un singolo carattere devi usare %c. Anyway, a te non serve a niente una cosa del genere, devi leggere l'intera stringa:

Codice: Seleziona tutto

printf("Hey brother inserisci una stringa:\n");
scanf("%s", str);
printf("Inserisci il carattere da controllare:\n");
scanf(" %c",&c);
Nota due cose: str non ha &, perché gli array sono passati per riferimento e non per valore in C, e prima del %c c'è uno spazio, per evitare che il \n della stringa dia fastidio.

Inoltre nella sottofunzione c'è un errore, if(ok=1)
Questa condizione è sempre vera, perché fai un assegnamento e non un confronto. Devi scrivere if (ok == 1)

Ancora,

Codice: Seleziona tutto

if(c==str[i])
         pos=i;
         ok=1;
         break;
è sbagliatissimo, perché non ci sono le parentesi graffe. Ogni volta che esegui il for il break viene chiamato già al primo ciclo.
È buona abitudine mettere sempre le parentesi, anche per le condizioni con una sola istruzione, in modo da evitare errori del genere.


Posizione carattere la puoi estremamente semplificare in questo modo:

Codice: Seleziona tutto

int posizioneCarattere(char str[N], char c){
	for(i=0; i<N; i++){
		if(c==str[i]) {
			return i;
		}
	}
	return -1;
}
spero di esserti stato utile

:ciao:
Solutions Architect at nextbit | About me
Changing the world bit by bit
Avatar utente
icp
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 409
Iscrizione: martedì 16 settembre 2008, 16:08
Località: Milano

Re: [CODE] Problemi con scanf e funzioni

Messaggio da icp »

Grazie Mille! Anche grazie al tuo aiuto ho passato la prima itinere di Info! ;)
Linux User #486360
Ubuntu User # 26456
Avatar utente
rpadovani
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3434
Iscrizione: lunedì 8 dicembre 2008, 19:49
Desktop: GNOME Shell
Distribuzione: Ubuntu 18.04 x86_64
Sesso: Maschile
Località: Munich, Germany
Contatti:

Re: [CODE] Problemi con scanf e funzioni

Messaggio da rpadovani »

:birra:
Spero soprattutto che tu abbia imparato qualcosa :-)
Solutions Architect at nextbit | About me
Changing the world bit by bit
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti