Для написания программ на C, который читает строки из текста файла, чье имя будет давать пользователь во время выполнения.Программа должна выбрать случайную строку файла и распечатать экран, предоставляя пользователю время X для ввода слов, отображаемых на экране.Время X зависит от длины каждой фразы, и вы можете считать, что каждый символ даст пользователю 1 секунду.Если сообщение напечатано правильно и вовремя, пользователь получает поздравления.Если сообщение об ошибке напечатано (и вовремя), то пользователь точно информируется об ошибках, которые он совершил.
Наконец, если время заканчивается до того, как распечатать сообщение, он спрашивает пользователя, хочет ли он продолжить.и при условии, что пользователь отвечает «да» на вышеупомянутую последовательность, повторяется для новой случайной строки файла, в противном случае программа завершается.
Может кто-нибудь сказать мне, что я сделал неправильно;Мне было бы проще, если бы вы написали нужный код ...
спасибо nik
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void catch_alarm (int sig)
{
char ans[2];
printf ("Operation timed out. Exiting...\n");
printf ("thes mia akoma eukairia?[y/n]\n");
scanf ("%s", ans);
exit (0);
}
void exodos (int sig)
{
printf ("termatismos ergasias... \n");
signal (SIGQUIT, SIG_DFL);
exit (0);
}
int main (int argc, char **argv)
{
int i, j, x, count, gram[80];
i = j = count = 0;
char arxeio[25], grammi[80], buf[80][80], protash[80], ch, ans[2];
FILE *fp;
printf("dwse to onoma tou arxeiou pou thes na anoixeis: \n");
scanf("%s", arxeio);
do
{
fp = fopen( arxeio, "r");
while ( (ch = getc(fp)) != EOF )
{
buf[i][j] = ch;
if ( buf[i][j] == '\n' )
{
++i;
gram[i] = j;
j = 0;
}
++j;
}
fclose(fp);
// edw vazoume tin rand kai to apotelesma tis sto 4 parakatw
x = rand() % i;
j = 0;
while (j<=gram[x+1])
{
printf("%c", buf[x][j]);
j++;
}
/* elenxos entos xronou an oxi TIME OUT... */
signal(SIGALRM, catch_alarm);
fflush(stdout);
alarm(gram[x+1]);
scanf("%s",protash);
if (ans[0] == 'n')
signal(SIGQUIT, exodos);
/* elenxos or8hs eisagwghs dedomenwn*/
j = 0;
while ( j<=(gram[x+1]-2) )
{
if ( buf[x][j+1] != protash[j] )
printf("anti gia %c egrapses %c\n", buf[x][j+1], protash[j]);
else
printf("swsto\n");
++j;
}
/* deuterh eukairia... */
}
while ( ans[0] == 'y' );
return 0;
}