Kan man begrænse scanf(); til kun at læse tal?

Tags:    c++

Hey hey.

Jeg har et projekt hvor mit program skal modtage input fra brugeren, det har jeg valgt at gøre på følgende måde:

/*get user input*/
printf("Please input a number: ");
scanf("%lf",&input_number);

Altså hvor scanf(); modtager input'et og sætter det ind i input_number variablen. Problemet er bare at det er meningen at brugeren skal taste et tal, men hvis der bliver tastet et bogstav sker der, lad os kalde det uforudsete ting... Nogen idéer?



4 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
http://goforit.unk.edu/cprogram/c_057.htm
Her står de forskellige ting du kan med scanf.

Får at læse et tal skal du bruge %d, så din kode skal se sådan her ud.

/*get user input*/
printf("Please input a number: ");
scanf("%d",&input_number);

Mvh.
Søren



BTW... det er C kode der er tale om.



Hey, ja det ved jeg godt, det står også i min bog, men programmet går stadig amok når man indtaster et bogstav.
Her er hele koden, det kan være det hjælper:

/*//////////////////////////////////////////////////////////////////////////////*/
/* */
/* Written by Dennis Ø. Petersen */
/* Subject: Programming C, 2006 */
/* Teacher: Lisbeth Kjældgaard */
/* Contact: Dennern@gmail.com */
/* Website: Dennern.1go.dk */
/* License: GPL or whatever you want... I don't care. */
/* */
/*//////////////////////////////////////////////////////////////////////////////*/


#include <stdio.h>

int main(int argc, char *argv[])
{

double old_number; /* previous Fibonacci number */
double current_number; /* current Fibonacci number */
double next_number; /* next number in the series */
double pos_number; /* the postion if the current number */
double input_number; /* the number that the user inputs */
double ratio; /* the ratio between "old_number and current_number */

/*get user input*/
printf("Please input a number: ");
scanf("%lf",&input_number);

/* start things out */
old_number = 1;
current_number = 1;

printf("\\n1.000000 0.000000\\n"); /* Print first number */
pos_number = 1; /* Assign the position of the first number */
while (input_number != pos_number)
{
ratio = old_number / current_number; /*Calculated the ratio between old_number and current_number*/

printf("%lf %lf\\n", current_number, ratio);
next_number = current_number + old_number;

old_number = current_number;
current_number = next_number;

pos_number +=1; /* increse position number for the next number in the sequence */
}

/*printf("\\nPress Q to quit the program: ");
while (getchar()!='q')
{
printf("\\n Please press Q to exit the program.");
}*/

system("PAUSE"); //The system pauses and asks the user to press the any key.

return (0);
}




Den rigtige løsninge er at bruge fgets til at læse en streng.
Og strtol til at lave strengen om til en int.



t