Ohjelmani täyttää muuten opettajan vaatimukset, mutta ohjeissa sanottiin vielä, että ohjelma ei saa kaatua sellaiseen, että kokonaisluvun sijaan syöttää esimerkiksi kirjaimen. Miten voin estää tuon?
Nopeita vastauksia kiitos!
Nopeita vastauksia kiitos!
Vastaukset 10
Vanhimmat
Onko kielenä puhdas C?
Lue merkkijonona (esim. fgets) ja muunna sitten numeroksi (esim. sscanf) ja tutki funktion paluuarvo.
C:n standardikirjastoa ei todellakaan ole kehitetty konsoli käyttöliittymien tekemiseen joten on aivan absurdia ja kohtuutonta jos harkkatöiltä vaaditaan kunnon virheiden hallintaa.
ncurses ja variantit ovat konsoli käyttöliittymiä varten.
try...catch
Ei ole C:tä.
jos pitää noin tehdä niin:
lisää:
#include "stdlib.h"
unsigned char sejoku[256];
int sejoku2;
void main(void)
{
gets(sejoku);
sejoku2=atoi(sejoku);
printf("%d\r\n",sejoku2);
return ;
}
Gets on itsemurha. Mitä jos käyttäjä syöttää yli 256 merkki?
Seuraa oitis puskurin ylivuoto.
Mutta itse asiaan. Kurssin vetäjä ei todennäköisesti tiedä C:stä mitään jos vaatii standardikirjastolla kirjoitettavaksi sellaista mihin sitä ei ole suunniteltu.
Itse käyttäisin curses kirjastoa tai ojentaisin opettajaa.
Ojentaisit opettajaa. :)
Esimerkiksi fgets on parempi kuin gets, koska sille voi antaa puskurin koon.
"Ojentaisit opettajaa. :)"
Näin on, turpaan vaan ja onnea.
Ei kun korjaisin fiksusti kurssin vetäjän huonoja ohjelmointitapoja.