Remove newline character function (C)

Trädvy Permalänk
Medlem
Registrerad
Jan 2013

Remove newline character function (C)

Hej!

Jag vill göra en funktion som tar bort det äckliga newline-karaktären vid användning av fgets. Såhär ser koden ut:

void removeAnnoyingNewlineCharacter(char* theString){ char* theCurrentChar = theString; char c1 = '\n'; char c2 = '\0'; while (*theCurrentChar != c1 || *theCurrentChar != c2){ printf("%c", *theCurrentChar); theCurrentChar++; } if (*theCurrentChar == '\n') *theCurrentChar = '\0'; }

När jag kör programmet så stannar inte while-loopen när ett newline hittats, utan det fortsätter. Någon som vet varför?

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Feb 2007

Kolla hur de gjort här annars:

http://stackoverflow.com/a/28462221/1261166

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2008

@Kossamu: I ditt villkor testar du *theCurrentChar != '\n' eller *theCurrentChar != '\0' och det kommer vara sant för alla värden på *theCurrentChar och loopen kommer att fortsätta ett varv till.

Trädvy Permalänk
Medlem
Registrerad
Jan 2013
Skrivet av Ingetledigtnamn:

@Kossamu: I ditt villkor testar du *theCurrentChar != '\n' eller *theCurrentChar != '\0' och det kommer vara sant för alla värden på *theCurrentChar och loopen kommer att fortsätta ett varv till.

Tackar Det gäller att få till logiken

EDIT: && fixar det

Trädvy Permalänk
Medlem
Registrerad
Aug 2016

void remove_n(char *str) { while(str++) if (*str == '\n') { *str = '\0'; break; } }

Du kanske kan använda något likt detta istället.. Har inte programmerat i C på flera år så det kanske finns ett bättre sätt att göra det på

Trädvy Permalänk
Medlem
Registrerad
Jan 2013
Skrivet av al10001:

void remove_n(char *str) { while(str++) if (*str == '\n') { *str = '\0'; break; } }

Du kanske kan använda något likt detta istället.. Har inte programmerat i C på flera år så det kanske finns ett bättre sätt att göra det på

Här blir det problem om newline inte skulle finnas i arrayen Det är därför jag har *str != '\0'

EDIT: Dock så blir det ju problem ifall det inte finns varken \n eller \0 i strängen heller för min kod

Trädvy Permalänk
Medlem
Registrerad
Jan 2013

Kan tillägga att jag pratade med en lärare som kom med en finurligt sätt att göra det på.

if (str[strlen(str)] == '\n') str[strlen(str)] = '\0';