Tutkiskelin haulla että löytyisikö ongelmaan apua mutta ei löytynyt eli päätän kysäistä: Minulla on siis muuttuja valikko joka on asetettu int:llä luvuiksi ja kun skannataan scanf-komennolla niin pitäisi saada niin että se ei hyväksy kun vain numeroita/numerosarjoja sillä jos siihen laittaa kirjaimen sen pitäisi alnaa ilmoitus: "Anna oikea valikko vaihtoehto" ja sen jälkeen se jää siihen jumittamaan... missä olisi vika?
Sama vika tulee jos muuttuja on char
Noin käy, koska %i ja %d tarkoittavat formaatissa kokonaislukua. Teepä vaikka näin:
if (scanf("%i", &luku) != 1) {
/* Saatiin luettua jotakin muuta kuin yksi luku (eli todennäköisesti nolla lukua). Luetaan seuraava sana pois puskurista... %s = string = tekstiä, yksi sana. * = ei tallenneta. */
scanf("%*s");
}Muuten hyvä mutta nyt jos pistän vaikka 1 ja enter se pistää uuden rivin ja sitten kun siihen laittaa munkä tahansa merkin se menee eteenpäin... mutta jos laitan esim. 1a niin menee suoraan...
Edit: Olin unohtanut ottaa vanhan scanf komennon pois ja nyt toimii kiitos.
Tässä vielä sama laajennettuna ohjelmaksi:
#include <stdio.h>
int main(void) {
int luku;
while (1) {
printf("Kirjoita valinta: ");
if (scanf("%i", &luku) != 1) {
scanf("%*s");
} else {
if (luku > 0 && luku < 10) break;
}
printf("Kirjoita kunnollinen luku!\n");
}
printf("Valinta: %i\n", luku);
return 0;
}Nyt ohjelma kysyy valintaa, kunnes käyttäjä antaa luvun 1 - 9.
Kiitos molemmille. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.