Avatar billede danielhep Nybegynder
27. maj 2003 - 13:04 Der er 10 kommentarer og
1 løsning

fgets problem

Hey, jeg har lidt knas med dette her, jeg kan ikke komme ind til printf..
Hvad er der galt ?

char compare="hej";
char store[20];
int ch;

fgets(store,20,stdin);

if((ch=strcmp(compare,store))==0)
{
  printf("yes, det lykkes :)\n");
}


Mvh

Daniel
Avatar billede soreno Praktikant
27. maj 2003 - 13:29 #1
Start med at gøre:
char *compare = "hej";
Avatar billede danielhep Nybegynder
27. maj 2003 - 13:34 #2
Soreno >>  Sorry, jeg glemte at sætte '*' i starten da jeg oprettede spm.  Men den virker heller ikke med '*'.
Ups, jeg glemte vidst lige at sige at jeg programmere under LInux Red Hat 9.0, så det er efter standarden.
Avatar billede arne_v Ekspert
27. maj 2003 - 13:53 #3
fgets returnerer inklusive \n.

Trunker den af med:

store[strlen(store)-1]='\0';

inden du strcmp'er.
Avatar billede bertelbrander Novice
27. maj 2003 - 14:45 #4
De mere pedantiske C programører vil nok mene at man bør checke om strlen(store) er større end 0 inden man "trunker den af", f.ex:
if(strlen(store))
  store[strlen(store)-1]='\0';

Personlig foretrækker jeg:
char *s = strchr(store, '\n');
if(s)
  *s = 0;
Avatar billede arne_v Ekspert
27. maj 2003 - 14:54 #5
Principielt en meget sund betragtning.

Men under hvilke omstændigheder vil strlen af buffer
være 0 efter en gets ?
Avatar billede bertelbrander Novice
27. maj 2003 - 15:29 #6
I tilfælde af at brugeren trykker EOF eller fgets læser fra en fil og der ikke er mere at læse. EOF er CTRL+D for nogle compilere.
Avatar billede segmose Nybegynder
27. maj 2003 - 16:08 #7
Det easy way

sæt
if (store[n = strlen(compare)] == '\n')
  store[n] = 0;
ind foran strcmp.
forudsætter at compare altid er højest samme længde som store.
Avatar billede danielhep Nybegynder
28. maj 2003 - 13:10 #8
arne_v >>

vil det sige at når jeg prøver at sammenligne min kode i min eksempel, så sammen ligner jeg "hej" med "hej\n", så jeg skal fjerne "\n", inden at jeg strcmp ??
Avatar billede arne_v Ekspert
28. maj 2003 - 13:45 #9
Ja.

Der er så forskellige måder at fjerne den \n på (se de mange indlæg).

Sådan fungerer gets/fgets bare.
Avatar billede bertelbrander Novice
28. maj 2003 - 15:28 #10
arne_v >> Man kan godt læse dit seneste indlæg somom gets() returnerer en streng med en '\n' i enden, det er ikke tilfældet. (Dette er iøvrigt ligegyldigt da ingen bør bruge gets).
Avatar billede arne_v Ekspert
28. maj 2003 - 15:57 #11
Det troede jeg faktisk at den gjorde.

Men du har ret - det gør den ikke.

Jeg bruger sjældent gets.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester