odczyt liczb z pliku do tablicy plus funkcje

0

Wiem, że jest błąd, ale nie wiem gdzie go szukać (możliwe, że jest większy), program wczytuje liczby z pliku i wykonuje różne operacje na nich.
Mogę uruchomić, wybrać opcje, nie jestem pewien czy coś nie pokombinowałem za bardzo z tablicą.

#include "stdafx.h"

int ile = 0;
unsigned int liczby[50];

void zera(){
	int n, k;
	printf("Podaj ile zer binarnych ma zawierac liczba: ");
	scanf_s("%d", &n);
	printf("Szukane liczby to: ");
	if (ile<50){
		int zera = 0;
		while (liczby[ile] == 0)
		{
			k = liczby[ile] % 10;
			if (k == 0) zera += 1;
			liczby[ile] = liczby[ile] / 10;
		}
		if (zera == n) printf("%u\t", liczby[ile]);
		ile++;
	}
}

void jedynki(){
	int m, k;
	printf("Podaj ile jedynek binarnych ma zawierac liczba: ");
	scanf_s("%d", &m);
	printf("Szukane liczby to: ");
	if (ile<50){
		int jedynki = 0;
		while (liczby[ile] == 0)
		{
			k = liczby[ile] % 10;
			if (k == 1) jedynki += 1;
			liczby[ile] = liczby[ile] / 10;
		}
		if (jedynki == m) printf("%u\t", liczby[ile]);
		ile++;
	}
}

void firstlast(){
	//KOD DO NAPISANIA-NIEISTOTNE
}

int _tmain(int argc, _TCHAR* argv[])
{
	int temp;
	bool dalej = true;
	char znak;
	unsigned int liczby[50];
	FILE *plik;
	//ZAPYTAJ O NAZWE PLIKU

	fopen_s(&plik, "liczby.txt", "r");
	while (feof(plik) == 0)
	{
		fscanf_s(plik, "%u", &temp);
		liczby[ile++] = temp;
	}
	printf("\nK-podaj ile zer ma miec liczba\nM-podaj ile jedynek ma miec ");
	printf("liczba\nN-liczby z 1 na 1st i last\nRESZTA-zamyka");
	printf("\nWybieram: ");
	void(*TabFun[3])() = { zera, jedynki, firstlast };
	while (dalej)
	{
		znak = getc(stdin);
		if (znak == 'K') TabFun[0]();
		else if (znak == 'M') TabFun[1]();
		else if (znak == 'N') TabFun[2]();
		else dalej = false;
	}

	fclose(plik);
	return 0;
}
1

Co to ma wg. Ciebie robic?

        while (liczby[ile] == 0)
        {
            k = liczby[ile] % 10;
            if (k == 1) jedynki += 1;
            liczby[ile] = liczby[ile] / 10;
        }

zastanów się ile wynosi wartość zmiennej "ile" i co się kryje liczby[ile]

0

Najważniejszy błąd to: nadużywanie zmiennych globalnych.

W drugiej kolejności: za dużo próbujesz robić w jednej funkcji.
Zrób takie małe funkcje:

int policzCyfryDziesietneWLiczbie(int x, int cyfra);
int ileBitowUstawionych(int x);
int wczytajDane(FILE *plik); // lepiej niż nazwa pliku bo można podać "stdin"

Jak to zrobisz od razu łatwiej ci będzie zauważyć błędy.

Kolejny błąd formatowanie, zawijaj wiersze po if, łatwiej jest debuggować.

I najważniejsze, naucz się używać debuggera, wtedy jeśli nawet twój umysł zafiksuje się na czymś, to i tak będziesz w tanie odnaleźć problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1