08. juli 2003 - 00:17Der er
13 kommentarer og 1 løsning
Scanf virker ikke
Hej
I mit forsøg på at lære det mest basale C er jeg stødt ind i nogle problemer med scanf. Her er min kode:
#include <cstdlib> #include <cstdio>
int main() { int nummer; char bogstav; printf("Skriv et tal\n"); scanf("%d", &nummer);
printf("Skriv et bogstav\n"); scanf("%c", &bogstav); //<-- ????????????????????
printf("Du skrev %d og %c", nummer, bogstav);
system("pause"); return 0; }
Problemet er at brugeren aldrig får mulighed for at indtaste bogstavet... Programmet springer nærmest linien markeret med ?????? over. Lige en ting til når jeg bytter om de to input så koden ser sådan ud:
#include <cstdlib> #include <cstdio>
int main() { int nummer; char bogstav;
printf("Skriv et bogstav\n"); scanf("%c", &bogstav);
printf("Skriv et tal\n"); scanf("%d", &nummer);
printf("Du skrev %d og %c", nummer, bogstav);
system("pause"); return 0; }
Virker det hele perfekt hvorfor det??
Nogen gode forslag (bruger dev-cpp og har programmet i c++ før)
En af de basale ting i C du bør springe over er scanf. Funktionen er defekt pr. design. Brug ALTID fgets til at læse indput fra brugeren. Jeg har programmerert i C i mere end 12 år og det er mere end 10 år siden jeg brugte scanf sidst.
Er der altid en eller anden bruger der vil taste et eller flere tegn for meget og gets har ingen mulighed for at vide hvornår den skal stoppe. Dette gælder uanset om man sætter XX til 80 eller 80000000000 Med fgets har man muligheden for at angive hvor mange tegn brugeren kan taste.
int main() { int nummer; char bogstav; char buffer[100]; /* cout << "Skriv et tal: "; cin >> nummer; cout << "Skriv et bogstav: "; cin >> bogstav; cout << "Du skrev " << nummer << " og " << bogstav << endl;
cout << "Skriv et tal og et bogstav: "; cin >> nummer >> bogstav; cout << "Du skrev " << nummer << " og " << bogstav << endl; */ /* printf("Skriv et tal og et bogstav: "); scanf("%d %c", &nummer, &bogstav); printf("Du skrev %d og %c\n", nummer, bogstav); */ /* printf("Skriv et tal: "); fgets(buffer,sizeof(buffer),stdin); sscanf(buffer,"%d", &nummer); printf("Skriv et bogstav: "); fgets(buffer,sizeof(buffer),stdin); sscanf(buffer,"%c", &bogstav); printf("Du skrev %d og %c\n", nummer, bogstav);
printf("Skriv et tal og et bogstav: "); fgets(buffer,sizeof(buffer),stdin); sscanf(buffer,"%d %c", &nummer, &bogstav); printf("Du skrev %d og %c\n", nummer, bogstav); */ system("pause"); return 0; }
udkommenter en af de 3 kode sektioner af gangen (du kan risikere sære ting hvis du udkommenterer mere end en).
Og som du kan se så "mangler" lige præcis dit eksempel. Og det er fordi scanf og reglerne for whitespace versus non-whitespace og linie-skift ikke lige passer til problem-stillingen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.