• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pliki tekstowe - odczyt zapisanie

Object Storage Arubacloud
0 głosów
486 wizyt
pytanie zadane 24 lutego 2018 w C i C++ przez shrajders Nowicjusz (120 p.)
edycja 24 lutego 2018 przez shrajders

Witam, jestem początkującym programistą i mam problem z pewnym zadaniem. kompilator pokazuje błąd przy mnożeniu zmiennych, zapewne dlatego że mnożę float * char , ale gdy zmienie char na int program przestaje działać. Nie wiem czy tak to należy zrobić. proszę o jakąś podpowiedź co powinienem zmienić aby program działał prawidłowo. 

#include <stdio.h>
#include <stdlib.h>
int main(void)
{

FILE *plik = fopen("pomiar.txt", "r");    
FILE *moc = fopen("moc.txt","w");
float m;
float n;
char s[30];
m=n*s;
if (plik == NULL)    
{
    printf("Otwarcie nieudane");
    exit(-1);    
}

while (fscanf(plik, "%f %s", &n, s) != EOF)
{    
    printf("n = %.1f, s = %s\n", n, s);
    
    fprintf(moc,"napięcie %.1f, natężenie %s, moc %.1f",n, s,m);
}
  
fclose(moc);
fclose(plik);
return 0;
}

polecenie :

to znajduje się w pliku pomiar :

komentarz 24 lutego 2018 przez Secrus Nałogowiec (32,880 p.)
Kod wrzuć w znacznikach CODE.
komentarz 24 lutego 2018 przez shrajders Nowicjusz (120 p.)
poprawione :)

1 odpowiedź

+2 głosów
odpowiedź 24 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)
  1. Wyrażenie
    m = n * s;

    jest bezsensowne. Mnożysz tutaj liczbę zmiennoprzecinkową z adresem tablicy.

  2. Dlaczego odczytujesz drugą liczbę z wiersza pliku jak napis? Użyj dwa razy %f i czytaj liczby do zmiennych m i n.

  3. Masz obliczyć chwilową moc dla każdego wiersza. Wystarczy więc zrobić n * m.

  4. Na końcu zapisujesz dwie odczytane liczby, czyli napięcie i prąd, oraz moc do danego wiersza pliku. Nadal używasz samych specyfikatorów %.1f bez żadnego tekstu (choć dla większej precyzji lepiej użyć %.2f).

komentarz 24 lutego 2018 przez shrajders Nowicjusz (120 p.)
edycja 24 lutego 2018 przez Patrycjerz
#include <stdio.h>
#include <stdlib.h>
int main(void)
{

FILE *plik = fopen("pomiar.txt", "r");    
FILE *moc = fopen("moc.txt","w");
float moc1;
float m;
float n;

moc1=m*n;
if (plik == NULL)    
{
    printf("Otwarcie nieudane");
    exit(-1);    
}

while (fscanf(plik, "%f %f", &m, n) != EOF)
{    
    printf("n = %.1f, m = %f\n", n, m);
    
    fprintf(moc,"napięcie %.1f, natężenie %f, moc %.1f",n,m,moc1);
}
  
fclose(moc);
fclose(plik);
return 0;
}

chyba o to chodzi, kompilator nie wskazuje błędów ale program przestaje działaś i się wyłącza ... 

komentarz 24 lutego 2018 przez Patrycjerz Mędrzec (192,320 p.)

Jest już noc, nie chcę wchodzić w zbędne dyskusje (bo widać, że nie znasz nawet podstaw). Po prostu podeślę gotowy, poprawiony kod. Tobie zostawiam jego zrozumienie.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	FILE *plik = fopen("pomiar.txt", "r");    
	FILE *moc = fopen("moc.txt","w");
	
	float moc1;
	float m;
	float n;
	
	if (plik == NULL)    
	{
		printf("Otwarcie nieudane");
		exit(-1);    
	}
	
	while (fscanf(plik, "%f %f", &m, &n) != EOF)
	{    
		printf("m = %.1f, n = %.1f\n", m, n);
		moc1 = m * n;
		fprintf(moc, "%.1f %.1f %.1f\n",m,n,moc1);
	}
	
	fclose(moc);
	fclose(plik);
	
	return 0;
}
komentarz 24 lutego 2018 przez shrajders Nowicjusz (120 p.)
Dziękuję bardzo, już wszystko rozumiem.
komentarz 24 lutego 2018 przez Beginer Pasjonat (22,110 p.)
edycja 24 lutego 2018 przez Beginer
Ponieważ to zadanie układał prowadzący, który zna się na elektryczności, byłoby mu przyjemnie, gdybyś te trzy zmienne: napięcie, prąd, moc nazwał odpowiednio literami: u, i, p tak, jak się oznacza w rzeczywistości (małymi literami dlatego, że są to wartości chwilowe). Jest noc ale jest moc:

p = u * i

Jeśli dasz radę zrób "rename", przy okazji utrwalisz sobie kod.

Podobne pytania

+4 głosów
2 odpowiedzi 15,111 wizyt
0 głosów
1 odpowiedź 263 wizyt
pytanie zadane 21 października 2021 w C i C++ przez Vifuso Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 316 wizyt

92,566 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...