Hey zijn hier mensen goed met C programming?

ik zat met een probleem ,

ik wil graag 2 strings verglijken
1 daar van via gets(a) (keyboard input)
2de via fgets(b,30,f) (lezen vanuit een .txt bestand)

daarna if (strcmp(a,b)==0)printf("gelijkwaardig")
else printf("ongelijkwaardig")

echter krijg ik op strcmp een waarde van -1 of +1 maar geen 0
dit is echter wel nodig om te kunnen vast stellen of de strings gelijk zijn aan elkaar.

vriendelijke groet
GMK0000

if Return value < 0 then it indicates str1 is less than str2.

if Return value > 0 then it indicates str2 is less than str1.

if Return value = 0 then it indicates str1 is equal to str2.

Misschien wat printf'jes ertussen zetten om te kijken wat je precies aan het vergelijken bent? Of defineer a en b in code ipv lezen.
Zie ook het voorbeeldje:
http://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm

Heb je aan de <cr> of <lf> gedacht die je via gets() aan het eind erbij krijgt?

Instinker!

Dat zou zo moeten werken. Maar fgets() leest een volledige tekst regel, inclusief het newLine character aan het einde. Die moet je dan eerst wegfilteren, of ook bij je keyboard input toevoegen anders zijn beide strings nooit hetzelfde.

@JoWi : Het is precies andersom, bij gets krijg je die newline gegarandeerd niet, bij fgets gegarandeerd wel.

Op 28 juli 2016 22:31:40 schreef GMK0000:
1 daar van via gets(a) (keyboard input)
2de via fgets(b,30,f) (lezen vanuit een .txt bestand)

D'r is een historische instinker: gets levert de string op ZONDER de afsluitende newline. fgets Geeft die afsluitende newline WEL mee....
[code="kwaliteit = om te testen"]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
test string
*/

int main (int argc, char **argv)
{
char a[100], b[100];
int line;
FILE *fp;

fp = fopen (argv[1], "r");
#ifdef USE_FGETS
fgets (a, 100, stdin);
#else
gets (a);
strcat (a, "\n");
#endif
line = 0;
while (fgets (b, 100, fp) ) {
line++;
if (strcmp (a, b) == 0) printf ("match op regel %d\n", line);
}
exit (0);
}

/*
test string
test2 string
*/
[/code]
Ik compileer met gcc -Wall teststrcmp.c en als ik dan run met: ./a.out teststrcmp.c dan krijg ik match op regel 5 en 30 geprint als ik "test string" intik.....

De derde methode om de strings vergelijkbaar te maken is om de newline er af te halen na de fgets uit het file.


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

ik ben er al uit. je moet inplaats van gets(a)
fgets(a,30,stdin) gebruiken.

Lekker dankbaar ben je. Ik leg het uit waarom het zo is, ik schrijf een demo programma voor je. en dan kom je melden dat je me genegeerd hebt. Aardig hoor.