Надо написать такую программу на чистом С (С++ не годится): программа считывает данные из текстового файла вот такого вида: 5.7 2.0 1.2 -76.4 -1123.0 2341 342.23 654.99 # 123.321 123.456 654.223 -543.555 # 456.223 -123.667 -234.567 -5039.23 # и т.д. Файл заканчивается знаком # Программа должна считывать числа в 2 массива предположительно так: Код (Text): fp = fopen("abcd.txt","r"); for(int i=0;i<linenumber;i++) { fscanf(fp,"%f %f",&x[i],&y[i]); } fclose(fp); до первого символа #, после чего вызывать другую программу. Как только та (другая) отработает, продолжается считывание следующих двух массивов, расположенных между двумя знаками # и т.д. до конца файла. Не могу понять как: 1) определить linenumber (число строк между двумя знаками #) 2) заставить программу определять знак # 3) определить конец файла
Код (Text): char myString[STRING_SIZE]; ... while (!feof(stdin)) \\как определить конец файла. Хотя можно и по возврату ф-ии fscanf { fscanf_s(fp,"%[^\n]s",myString,STRING_SIZE); \\как считывать всё построчно, включая символ "#" \\Здесь делается проверка, является ли строка символом "#" \\Если в строке данные, то читаем их: sscanf_s(myString,"%f%f",&x[i],&y[i]); } Вопрос "как определить linenumber?" не понимаю. Брать и считать, сколько строк считывали.
Прошу прощения... разумеется не stdin, а указатель на соответствующую структуру FILE. В Вашем случае вместо stdin должна быть fp.
Отлично, да вот только компилятор не понимает операторов fscan_s и sscanf_s -- только fscanf и sscanf
djmans Ну да... параноидальные. Как раз отличное место для эксплоита будет. Надо будет только строчку какую-нибудь в файле немного длиннее STRING_SIZE сделать.
Clerk Уж это слишком для программки из первого поста, которая тянет максимум на лабу в универе. Тем более, что программу задали написать на Си и скорее всего имели в виду рантайм, а не апишки. fscanf и прочая лабуда из stdio прекрасно справятся с задачей. Не надо усложнять там, где не требуется)