Portál AbcLinuxu, 11. května 2025 06:40
Používám na vypsání scanfTo asi ťažko. Skús sa spýtať ešte raz.
#include <stdio.h> int main() { int min, max, i; char end[2]; if (scanf("<%d,%d%1[>]", &min, &max, end) == 3) for (i = min; i <= max; i++) printf("%d\n", i); return 0; }Funkce scanf vrací počet úspěšně načtených proměnných.
scanf("<%d,%d>",&a,&b)a na vstup napíšem
<123,456>tak to zafunguje, ale užívateľ musí napísať aj znaky '<', '>' a ','. Ak tam dá napr. bodkočiarku, tak to nezafunguje, lebo bodkočiarka nie je čiarka. Ak tam dá miesto čiarky medzeru, tak to nezafunguje lebo čiarka vo formátovacom reťazci sa nenájde na vstupe. Ak dá medzeru na pred znak < tak to zasa nezafunguje, lebo formátovací reťazec začína znakom < a tam sa žiadne biele znaky nepreskakujú. Cvičenie #1: zafunguje?
<123, 456>Cvičenie #2: zafunguje?
<123 ,456>
#include <stdio.h> #define IS_NOT_NUMBER(a) (!((a) >= '0' && (a) <= '9')) /* vsetky ostatne znaky okrem cisiel riadku "zmaze" (nahradi medzerou) */ void clean_on_number(char *buffer, size_t lenght) { char *p; if(buffer == NULL) return; for(p=buffer;*p != '\0'; p++) if(IS_NOT_NUMBER(*p)) *p=' '; } int main(int argc, char **argv) { int min, max, i; char buffer[100]; if(fgets(buffer, 100, stdin) != NULL) { clean_on_number(buffer, 100); sscanf(buffer, "%d %d", &min, &max); for (i = min; i <= max; i++) printf("%d\n", i); } return 0; }
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.