Используйте 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