IN C Starndard lib, use gets can input string form stdio.
for example, push [backspace] can remove the last char.
But when i use gets(), it keep backspace char (0x0B).
I just refenece VC++ document. So you right.
I should write a func to handle it, like this. char *getstring(char *string) { char *pointer; INT ch;
pointer = string; while (1) { ch = _getchar_lk(); if (ch == EOF) { return NULL; }
if (ch == 8) { if (pointer > string) { putchar('\b'); putchar(' '); putchar('\b'); pointer--; } } else if (ch == '\r' || ch =='\n' || ch >= ' ') { putchar(ch); if (ch == '\r') putchar('\n'); if (ch == '\n' || ch == '\r') break; *pointer++ = ch; } }
*pointer = 0; return string; }
Any reason why you missed the instruction how to post source code? Notice any difference in readability?
char *getstring(char *string) { char *pointer; INT ch; pointer = string; while (1) { ch = _getchar_lk(); if (ch == EOF) { return NULL; } if (ch == 8) { if (pointer > string) { putchar('\b'); putchar(' '); putchar('\b'); pointer--; } } else if (ch == '\r' || ch =='\n' || ch >= ' ') { putchar(ch); if (ch == '\r') putchar('\n'); if (ch == '\n' || ch == '\r') break; *pointer++ = ch; } } *pointer = 0; return string; }
By the way - what happens if you have already received characters that you have stored in your string when you get an EOF?
Another thing - exactly how large is your string? What happens if someone enters moer characters than what will fit in string?
Remember that VC++ documentation will deal with the specific VC++ implementation; you should not assume that what it says is generally applicable to all implementations - especially embedded cross-compiler implementations!
I don't think the VC++ documentation claims such behaviour either, since such behaviour is not part of the C standard and platform-specific behaviour should only be introduced when the platform so needs.
I can't find anything in my VC++ documentation.
But as I did mention - when the sending side handles the data line-by-line instead of character-by-character, it can process the backspace character so you may see this behaviour in a test program even if it isn't gets()/fgets() that is doing the backspace processing.