2014-10-05 4 views
-2

Я использую код fopen в C, чтобы прочитать текстовый файл. Затем я использую код fscan, чтобы проверить целое число в этом файле, которое должно быть 1 < = N < = 5.Как читать буквы в текстовом файле в C?

Что я хочу, когда текстовый файл содержит буквы внутри него, чтобы показать мне предупреждение о том, что файл имеет по крайней мере одну букву внутри. Но если он не должен перекодировать другой код.

Как я могу это сделать? Я хочу, чтобы поместить код после команды fscanf и перед if

Вот код

FILE * fp;              //declare fp as a "fopen" command.  
fp = fopen ("xxx.txt", "r");          // opening the file "xxx.txt" 
if (fp == NULL)             // error here if there was a problem! 
{ 
    printf("Opening 'xxx.txt file failed: %s\n",strerror(errno)); // No such file or directory 
    getchar();             // wait the user press a key 
    return 0;              // returning an int of 0, exit the program 
} 
else                // if everything works..... 
{ 
    fscanf(fp,"%d",&num);           // here goes the fscanf() command 
    if(num<1 || num>5)           // set restrictions to integer 
    { 
     printf("The number must be 1<= N <= 5",strerror(errno)); // error with the integer number 
     getchar();            // wait the user press a key 
     return 0;             // returning an int of 0, exit the program 
    }    
    else               // if everything works..... 
    { 
     // some code here     
    } 
} 
+0

Во-первых: проверьте возвращаемое значение 'scanf()'. – pmg

+0

'fopen' и' fscanf' не * коды *, но * библиотечные функции *. Вы должны прочитать документацию [fopen (3)] (http://man7.org/linux/man-pages/man3/fopen.3.html) & [fscanf (3)] (http://man7.org/ linux/man-pages/man3/fscanf.3.html) - и каждой другой функции, которую вы используете, - и вы должны проверить их возвращаемое значение. Кроме того, скомпилируйте все предупреждения и информацию об отладке ('gcc -Wall -g') и используйте отладчик (' gdb') –

+0

. Что содержит ваш файл? Будет ли у него некоторый символ, за которым следует число, за которым следуют символы или просто число? Вопрос неоднозначен. – Abhi

ответ

1

Это вставляется после сканирования для NUM должен прочитать остальную часть файла и сообщить, если письмо найденный и возвращенный 1. Сначала он получает позицию в файле, чтобы позже вернуться в это место и продолжить чтение файла для целых чисел. Если письмо найдено, оно возвращает 1. Если буквы не найдены, они сбрасывают положение файла обратно туда, где оно было после сканирования num.

int readch = 0; 
long int filepos = 0L; 
filepos = ftell (fp); // get the file position                 
while ((readch = fgetc (fp)) != EOF) { // read each character of the file          
    if (isalpha (readch)) { // check each character to see if it is a letter          
     printf ("File contains letters\n"); 
     fclose (fp); 
     return 1; 
    } 
} 
fseek (fp, filepos, SEEK_SET); // move file position back to where it was after reading num 
+0

работа 1000000000000%;) –

Смежные вопросы