• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Считывание Из Файла

  • Автор темы Hirulez
  • Дата начала
H

Hirulez

C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int num_input(double array[],int n,char* fname,int* flag)
{
char line[1024], *arr[n], *part, *ch;
int k,i=0;
FILE *test=fopen(fname,"r+");
if (strlen(fname))
{
if (!test)
{
*flag=1;
return (0);
}
}
for (k=0;k<n;k++)
{
if (strlen(fname))
{
if (feof(test)) break;
fgets(line, 1024, test);
}
else
{
fgets(line, 1024, stdin);
}

part = strtok (line," ");
while (part != NULL)
{

arr[i] = calloc (strlen(part)+1, sizeof(char));
strcpy(arr[i],part);
part = strtok (NULL, " ");
i++;
}
}
n=i;
for (i=0;i<n;i++){
printf("%s\n", arr[i]);
}

*flag=0;
if (strlen(fname))
{
if(fclose(test)) *flag=3;
}
return (0);
}

int main(){
double mass[10];
int i,x,k;
num_input(mass,10,"data.txt",&k);
if (k==1) printf("File data.txt does not exist. \n");
if (k==2) printf("Out of memory. \n");
if (k==0){
printf("Start program \n");
printf("Data from file data.txt: \n");
for (i=0;i<=9;i++ ){
printf("%f\n",mass[i]);

}
printf("flag = %d\n",k);
printf("End program. \n");
}
return 0;
}
Задание. Есть файл в нем текстовые данные, надо каждое слово считать в массив.
Пример исходных данных:
1 2 3
4
5

должен получиться массив:
1
2
3
4
5

а у меня получается
1
2
3

4

5
т.е. пустые элементы, хотел убрать их НО!!! при сравнении это получается не пробел, не \n, не NULL.. пытался с помощью функции isspace тоже не дает она истинное значение..


P.S. надо вообщем как то убрать эти пустые места, ни прибегая к кардинальному изменению программы. т.е. только само считывание изменить, или как то дописать чтобы убрать эти места. надеюсь на вашу помощь. язык С т.е. просто С =)
 
L

lazybiz

Вот тебе простой пример:
C++:
#include <stdio.h>
#include <stdlib.h>

void main ()
{
FILE *	fp;
char	tmp[256];

fp = fopen( "z.txt", "rb" );

while ( fscanf( fp, "%s", tmp ) != EOF ) {
printf( "\'%s\'\n", tmp );
}

fclose( fp );
}
 
V

Vadik(R)

Кроме \n есть ещё символ \r, который используется в Win-формате при переносе строк.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!