Используйте fscanf, чтобы прочитать две строки целых чисел

Я хочу спросить кое-что, что я пишу на C.

Я использую fopen() Команда открыть и прочитать текстовый файл, который содержит только две строки. в первой строке - целое число N, а во второй - N целых чисел, о которых говорится в первой строке.

Например.

-------------- nubmers.txt --------------
8                                       <-- we want 8 numbers for the 2nd line
16 8 96 46 8 213 5 16                   <-- and we have 8 numbers! :)

но я хочу взять ограничения, когда файл openend.

число N должно быть между 1 ≤ Ν ≤ 1.000.000, Если нет, то показать сообщение об ошибке. Если файл в порядке, программа продолжит работу с другим кодом.

Вот что я сделал до сих пор:

int num;

....

   fscanf(fp,"%d",&num);                                                    // here goes the fscanf() command
            if(num<1 || num>1000000)                                            // set restrictions to integer 
            {
        printf("The number must be 1<= N <= 1.000.000",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.....
            {
        printf("work until now");                                               // Everything works until now! :)
        getchar();                                                              // wait the user press a key
        return 0;                                                               // returning an int of 0, exit the program
            }

Но проблема в том, что ограничение проверяет только номер первой строки, хотя это правильно, но не читайте числа во второй строке.

Я имею в виду следующее: допустим, у меня есть номер 10 в первой строке. Код проанализирует число, проверит наличие ограничений и перейдет к части "else".

else                                                                // if everything works.....
                {
            printf("work until now");                                               // Everything works until now! :)
            getchar();                                                              // wait the user press a key
            return 0;                                                               // returning an int of 0, exit the program
                }

... и будет сказано, что все работает. Но что, если у меня есть 20 цифры во второй строке? когда мне нужно только 10

Например.

-------------- nubmers.txt --------------
10
16 8 96 46 8 213 5 16 8 9 21 5 69 64 58 10 1 7 3 6

Поэтому я надеялся, что меня очистят, насколько я мог. Мой вопрос заключается в том, что мне нужен код в программе, кроме 1-го ограничения, у которого есть еще одно ограничение под первым, которое будет читать вторую строку txt-файла с числами и проверять, есть ли столько чисел, сколько первое линия говорит!

Как я могу это сделать? Если вы, ребята, хотите другие заявления, не стесняйтесь спрашивать! Надеюсь, с моей проблемой все было в порядке:)

3 ответа

Решение

Это проверит количество целых чисел и сообщит слишком много или недостаточно. Целые числа не сохраняются, за исключением того, что каждое из них читается в value, Вы хотите хранить каждое целое число?

fscanf(fp,"%d",&num); // here goes the fscanf() command                                                                   
if(num<1 || num>1000000) // set restrictions to integer                                                                   
{                         
    printf("The number must be 1<= N <= 1.000.000",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.....                                                                                          
{                         
    int i = 0;            
    int value = 0;        
    while ( fscanf ( fp, "%d", &value) == 1) { // read one integer                                                        
        i++; // this loop will continue until EOF or non-integer input                                                    
    }                     
    if ( i > num) {                     
        printf ( "too many integers\n");
    }                     
    if ( i < num) {                       
        printf ( "not enough integers\n");
    }                     
    getchar(); // wait the user press a key                                                                               
    return 0;  // returning an int of 0, exit the program                                                                 
}                     

Используйте цикл, который принимает первое число и проверяет, является ли число целых чисел в следующей строке:

int z = num;

while(z--){
    if (getchar() == EOF)
        printf("err")
}

Сделай это так:

    fscanf(fp,"%d",&num);

    // next lines of code (restrictions). Then place the below code before getchar in the else

    int temp[num+1];// space to store num integers to temp and 1 space to check for extra number

    for(i=0;i<num;i++)
    {
        if(fscanf(fp,"%d",&temp[i]) != 1)// fscanf will automatically read 2nd line and store them in temp array
        //error ! Less numbers in file !
    }

    if(fscanf(fp,"%d",&temp[num]==1) //if still numbers can be scanned
    //Extra numbers found in line 2
Другие вопросы по тегам