Informatică, întrebare adresată de catalinmorar, 9 ani în urmă

Ce gresesc?Nu imi numara spatiile si prima litera din sir mi-o sterge.
#include
#include
int main (void)
{
char *p;
int i=0;
p=(char*)malloc(50*sizeof(char));
gets(p);
for(*p=0;*p<50;*p++){
switch(*p){
case ' ':i++;break;}
}
printf("Numarul spatiilor:%d",i);
printf("\n%s",p);
}


Seckar: Ce anume vrea sa faca programul?
catalinmorar: Să se scrie un program C care numără spaţiile dintr-un şir introdus de utilizator. Afişează şirul şi numărul de spaţii din şir (Se va folosi alocarea dinamică pentru citirea șirului).
Seckar: Ma uit acum.
Seckar: Ce includuri ai pus, ca aici nu apar?
catalinmorar: stdio.h si stdlib.h

Răspunsuri la întrebare

Răspuns de Seckar
1
Bun, pai tu iti aloci acolo treaba bine, ceea ce pot sa respect, sincer aia e cea mai grea parte cu malloc :))

Citesti corect cu gets.

Dar apoi in for ce faci tu acolo...? Pai in p ai citit ce la user, de ce scrii peste el? De aia nu merge, tu practic citesti de la user o variabila si apoi ii atribui o alta valoare saracuta. pentru for trebuie sa folosesti un contor separat. 

Apreciez totusi ca ai incercat asa ca o sa iti dau cam cum se face. 

Ignora ca eu am folosit gets_s, la gets_s pur si simplu ii dau ca parametru si sirul de caractere, si cate caractere sa imi citeasca in el. Practic acel _s vine de la secure, deoarece in gets normal putea sa iti dea de la tastatura mai multe caractere decat iti alocasei tu cu malloc, si atunci... not pretty. 
Anexe:

catalinmorar: Si eu apreciez ajutorul tau,nu m-am gandit la strlen() :))
Seckar: Nu ai pentru ce, o sa vezi ca cele mai folosite functii de stringuri sunt strlen si strcpy. :))
catalinmorar: Da la asta unu ce zici c-am gresit?:))
catalinmorar: #include<stdio.h>
#include<stdlib.h>
int main(void)
{
char *p,i;
p=(char*)malloc(50*sizeof(char));
gets(p);
for(i=0;i<50;i++)
if(p[i]==' '){
{
p=&p[i];
printf("%s",p);}
}
}
catalinmorar: Asta se cere: Scrieţi un program C care să citească un şir şi apoi să caute în şir primul spaţiu. Dacă găseşte un spaţiu să afişeze restul şirului (Se va folosi alocarea dinamică pentru citirea șirului).
Alte întrebări interesante