Как мне считать из файла числа в какой-нибудь массив char или string так, чтобы я мог посчитать кол-во этих чисел (например “2”, “324” “11” и любого другого числа). Функция sizeof или метод size() не работают. Не могли бы вы предложить какую-нибудь конструкцию, идею как это можно реализовать.
Harry
214k15 золотых знаков117 серебряных знаков228 бронзовых знаков
задан 13 дек 2021 в 20:24
6
Просто читать и считать числа…
int x, counter = 0;
{
ifstream in(filename);
while(in >> x) counter++;
}
cout << counter;
ответ дан 15 дек 2021 в 15:43
HarryHarry
214k15 золотых знаков117 серебряных знаков228 бронзовых знаков
1
I’m reading a text file of numbers and I want to get the sum of this number, how can I determine the number of numbers in the text file.”my text file is consist of one line”
this is the code I have written, how to determine number of numbers in the text file to put it instead of the variable “number of numbers” in the secondline of code
int main()
{
FILE *file = fopen("numbers.txt", "r");
int integers[number of numbers];
int i=0;
int j=0;
int num;
while(fscanf(file, "%d", &num) > 0) {
integers[i] =num;
printf("%d",integers[i]);
printf("n");
i++;
}
int sum=0;
for(j=0;j<sizeof(integers)/sizeof(int);j++)
{
sum=sum+integers[j];
}
printf("%d",sum);
printf("n");
fclose(file);
return 0;
}
WhozCraig
65k11 gold badges74 silver badges140 bronze badges
asked Aug 24, 2013 at 21:32
2
If you want to do this, there are three possible solutions:
- make
integers
quite large (say 10000 elements) and say “Too many numbers” if there are more than the “quite large” number. - Read the file twice, count the number of numbers the first time, second time store them.
- Use dynamic allocation, and start with a small number, when that number is reached use
realloc
to allocate a larger array, until all numbers have been read.
However, in your particular case, what you are doing can be done without at all storing the numbers. So, the whole integers
array is completely unnecessary.
Just do:
sum += num;
in the first loop.
answered Aug 24, 2013 at 21:40
Mats PeterssonMats Petersson
126k14 gold badges136 silver badges225 bronze badges
First, figure out if you actually need to save every number. Quite frequently it is possible to do simple data processing by computing some intermediate result without needing to keep every input. For example, it is possible to compute the mean and standard deviation of an input set without keeping the input dataset.
In your specific example, you can print every number as it is read, then accumulate them into sum
, without having to keep all of them.
If you decide you really need to keep every number, then you have two options:
- Read through the file once to count the number of numbers, then allocate the array, then
fseek
back to the beginning to read all of them. - Allocate an initial array, then use
realloc
to progressively increase its size (in this case, make sure to increase the size by a fixed factor when needed, rather than just increasing the size by one).
answered Aug 24, 2013 at 21:41
nneonneonneonneo
170k35 gold badges305 silver badges377 bronze badges
If you don’t need individual numbers but only the sum of all of them, what you should do is just add them together at the same time as you read them:
int sum = 0;
int num;
while(fscanf(file, "%d", &num) > 0) {
sum += num;
printf("%d",num);
printf("n");
}
On the other hand, if you really need to keep every single number, you can do it different ways.
- You could first read the file while counting the numbers, then seek to the beginning, allocate the needed memory and read again saving each number.
- You can ask for some memory at first, and when you run out (you are going to have to keep track of how many free spaces you have) ask for more memory (
realloc
), and keep doing that until you are finished. - You can use a linked list instead of an array, if you didn’t need random access.
Edit:
If for some case you need to do an avarage, and thus you really need the total amount of numbers you read, just declare a int n = 0;
and inside the loop do ++n;
so you have it in the end.
answered Aug 24, 2013 at 21:43
rorlorkrorlork
5235 silver badges15 bronze badges
8
Как на Си возможно посчитать кол-во чисел в файле txt? Числа вещественные и разделены пробелом, например: 3.12 5.44 5.55 8.90
-
Вопрос заданболее двух лет назад
-
611 просмотров
Пригласить эксперта
Взял размер файла (man readdir)
Запросил памяти под чтение файла по размеру файла (man calloc)
Открыл файл (man open)
Прочитал его (man read)
Закрыл файл (man close)
Посчитал число пробелов в буфере, проверил, что после последнего идет цифра (исключить ситуацию когда пробел после последнего числа), если это так, прибавил единицу
Вывел
Освободил память (man free)
ПРОФИТ!
-
Показать ещё
Загружается…
19 мая 2023, в 19:02
60000 руб./за проект
19 мая 2023, в 18:28
7000 руб./за проект
19 мая 2023, в 17:38
500 руб./за проект
Минуточку внимания
#include <stdio.h> #include <stdlib.h> #include <time.h> #include "logotip.c" #include <ctype.h> #include <string.h> #include <unistd.h> void time_stamp(FILE *f) { time_t t; t=time(NULL); fprintf(f,"=====%s=====n",ctime(&t)); } int main(int argc,char* argv[]) { char a1,a2; char buffer[20],str_file[100]; char mass[100],ch,word[100]; char word_max[100]; //const char ch[200],mass[100]; int a,i,n1,b,count=0,state; int n; int j; FILE *filein,*fileout,*flog; logo(); printf("Краткое изложение задачи:n"); printf("В текстовом файле найти самую длинную последовательность цифрn"); printf("Выполнил Рожкин Павел Александрович,ИВТ-12n"); sprintf(buffer,"%s.log",argv[0]); if((flog=fopen(buffer,"a"))==NULL) { puts("Ошибка открытия журнала"); puts("Нажмите Enter"); getchar(); exit(0); } time_stamp(flog); fprintf(flog,"Программа %s приступила к работе",argv[0]); if(argc<2) { time_stamp(flog); fprintf(flog,"Ошибка,недостаточно аргументов командной строки,работы завершенаn"); printf("Ошибка,используйте %s filename1 filename2n",argv[0]); getchar(); fclose(flog); exit(0); } if((filein=fopen(argv[1],"r"))==NULL) { time_stamp(flog); fprintf(flog,"Невозможно открыть входной файл %s ,программа завершила работу",argv[1]); getchar(); fclose(flog); printf("Невозможно открыть файл %s,программа завершает работуn",argv[1]); exit(0); } time_stamp(flog); fprintf(flog,"Файл %s открыт успешно",argv[1]); if((fileout=fopen(argv[2],"w"))==NULL) { time_stamp(flog); fprintf(flog,"Невозможно открыть файл %s ,программа завершила работу",argv[2]); printf("Невозможно открыть выходной файл %s,программа завершает работуn",argv[2]); getchar(); fclose(flog); exit(0); } time_stamp(flog); fprintf(flog,"Файл %s открыт успешно",argv[2]); //printf("asdasdsadn"); state=0; n=0; i=0; while(1) { ch=fgetc(filein); if(feof(filein)) break; if(state==0&&isdigit(ch)) { word[count]=ch; state=1; count++; n++; //fprintf(fileout,"%c",ch); continue; } if(state==0&&!isdigit(ch)) { //count=0; n=0; continue; } if(state==1&&!isdigit(ch)) { word[count]=''; state=0; if(i==0) {n1=n;i++;} if(n<n1&&n1!=n) { //printf("%cn",word); //strcpy(word_max,word); } else { n1=n; strcpy(word_max,word); } count=0; n=0; } if(state==1&&isdigit(ch)) { word[count]=ch; count++; //fprintf(fileout,"%c",ch); n++; continue; } } fprintf(fileout,"Наибольшая последовательность цифр(она состоит из %d цифр ):%s",n1,word_max); printf("Наибольшая последовательность цифр(она состоит из %d цифр )%sn",n1,word_max); fclose(filein); fclose(fileout); fprintf(flog,"Операция выполнена успешно,%s и %s успешно закрыты,программа завершила работу",argv[1],argv[2]); printf("Операция выполнена успешно,%s и %s успешно закрыты,программа завершает работуn",argv[1],argv[2]); getchar(); fclose(flog); exit(0); }
Сообщения без ответов | Активные темы | Избранное
|
в файле не получается посчитать количество чисел (Си) 09.10.2009, 00:45 |
09/10/09 |
Из файла, в котором по мимо прочих символов находятся действительные числа, эти самые числа переписываются в другой файл. Но вот посчитать количество этих чисел не получается никак( Подскажите пожалуйста, в каком месте следует счётчик поставить. #include <stdio.h> int main ()
if (c >= ‘0’ && c <= ‘9’) { fprintf(f2, “%c “, c);
|
|
|
e2e4 |
Re: в файле не получается посчитать количество чисел (Си) 09.10.2009, 00:53 |
21/03/06 |
Дык этта. Если вам кол-во цифр посчитать, то вставляйте в Код: if (c >= ‘0’ && c <= ‘9’) { fprintf(f2, “%c “, c); Если надо посчитать кол-во чисел, представляемых этими самыми цифрами, то формат записи чисел и символ-разделитель(и) в студию! Заготовка кода вроде верная, пока что переменная i у вас лишняя, и форматирование ужасное.
|
|
|
syroeshka |
Re: в файле не получается посчитать количество чисел (Си) 09.10.2009, 01:09 |
09/10/09 |
e2e4, благодарю. А то я уже эту i куда только не пыталась засунуть.
|
|
|
e2e4 |
Re: в файле не получается посчитать количество чисел (Си) 09.10.2009, 01:46 |
21/03/06 |
Обнулить только i не забудьте перед подсчетом .
|
|
|
Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |