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
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.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
@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';
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
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.