Hvad er forskellen mellem "% [^ \ n]" og "% [^ \ n] s" i en C-scanf?


Svar 1:

Afstand er meget vigtig: et enkelt rum i scanf-formatstreng er et kontroltegn, der instruerer det til at udføre ikke-trivielt arbejde, der involverer en løkke. Som skrevet siger spørgsmålet “% [^ \ n]” og “% [^ \ n] s”, som begge er forkerte. Jeg antager, at det skulle være “% [^ \ n]” og “% [^ \ n] s”

I scanf er% [^ \ n] et format, der bruger en eller flere tegn op til og ikke med den næste slutline. Den forventer at blive matchet med et tegn *, der peger ind i et char array, hvor disse tegn skrives til uden grænsekontrol. Ligesom% s, skal% [aldrig nogensinde bruges uden at angive størrelsen på matrixen:

char s [100];
scanf ("% s", s); // DÅRLIG, som får
scanf ("% 99s", s); // god, læser et ord i s
scanf ("% [^ \ n]", s); // DÅRLIG, som får
scanf ("% 99 [^ \ n]", s); // god, læser en ikke-tom linje til s

% [^ \ n] s er to ikke-relaterede ting:% [^ \ n] beskrevet ovenfor, og det enkelt bogstav "s". Et enkelt bogstav, der ikke er hvidt, i scanf er en instruktion til at læse og kassere det nøjagtige bogstav fra input og mislykkes ellers. Da% [^ \ n] altid forlader \ n i inputstrømmen, mislykkes% [^ \ n] s altid. Med andre ord, det er vrøvl.