Code:
printf("\nVychozi mena: ");
for(int i = 0; i < 3 ; ++i){
scanf("%3s", vychoziKod);
vychoziKod[i] = toupper(vychoziKod[i]);
}
It's possible do same thing but print whole array and not printing for letters?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define ukoncovaciZnak 5
typedef struct registrMeny_t {
char zeme[30];
char bankovka[10];
int mnozstvi;
char kod[10];
float kurz;
} RegistrMeny;
int main(void)
{
printf("Dom. ukol c.4.\n");
FILE *mena;
mena = fopen("mena.txt", "r");
if(mena == NULL){
printf("Error: soubor nebyl nalezen.\nPokud soubor existuje: prejmenujejte jej na mena.txt.\n");
return 1;
}
char radek[50], *kod, vychoziKod[4], cilovyKod[4], instrukce;
float suma=0, kurz, meziVysl=0, vysl=0;
int mnozstvi;
zacatek:
rewind(mena);
printf("\nKolik si prejete prevest: ");
scanf("%f", &suma);
printf("\nVychozi mena: ");
for(int i = 0; i < 3 ; ++i){
scanf("%3s", vychoziKod);
vychoziKod[i] = toupper(vychoziKod[i]);
}
printf("\nCilova mena: ");
scanf("%3s", cilovyKod);
for(int i = 0; fgets(radek, 50, mena) != NULL; ++i){
if(i > 1){
char *data = radek;
char *dataPtrs[ukoncovaciZnak];
RegistrMeny seznamMeny[50];
int aktualniMena = 0;
for(dataPtrs[0] = data, i = 1; i < ukoncovaciZnak; ++i){
dataPtrs[i] = strchr(dataPtrs[i-1], '|')+1;
}
for(int i = 0; data[i] != '\0'; ++i){
if(data[i] == '|' || data[i] == '\n')
data[i] = '\0';
if(data[i] == ',')
data[i] = '.';
}
strncpy(seznamMeny[aktualniMena].zeme, dataPtrs[0], 30);
strncpy(seznamMeny[aktualniMena].bankovka, dataPtrs[1], 10);
seznamMeny[aktualniMena].mnozstvi = atol(dataPtrs[2]);
strncpy (seznamMeny[aktualniMena].kod, dataPtrs[3], 10);
seznamMeny[aktualniMena].kurz = atof(dataPtrs[4]);
printf("%4ld %s = %.3f\n", seznamMeny[aktualniMena].mnozstvi , seznamMeny[aktualniMena].kod, seznamMeny[aktualniMena].kurz);
if(strcmp(seznamMeny[aktualniMena].kod, vychoziKod) == NULL){
meziVysl = suma * (seznamMeny[aktualniMena].kurz / (float)seznamMeny[aktualniMena].mnozstvi);
/* printf("\n%.3f", suma);
printf("\n%.3f", seznamMeny[aktualniMena].kurz);
printf("\n%d", seznamMeny[aktualniMena].mnozstvi); <--- testing
printf("\n%.3f\n", meziVysl);
}*/
/** Question **/
/* when i had there other if (i will paste)
if(strcmp(seznamMeny[aktualniMena].kod, cilovyKod) == NULL){
vysl = (meziVysl / seznamMeny[aktualniMena].kurz) * (float)seznamMeny[aktualniMena].mnozstvi);
so there theese two if fighting each other ... i must have twice that cyclo? or i can somehow save place?
*/
seznamMeny[aktualniMena].zeme[30 - 1] = '\0';
seznamMeny[aktualniMena].bankovka[10 - 1] = '\0';
seznamMeny[aktualniMena].kod[10 - 1] = '\0';
if(++aktualniMena >= 50){
printf("Error: prilis mnoho informaci!\n");
return -1;
}
++aktualniMena;
}
}
puts("\n");
operace:
printf("\nPokracovat v zadavani: a/n\n");
scanf("%c", &instrukce);
scanf("%c", &instrukce);
switch(instrukce){
case 'n': case 'N':{
goto konec;
}
case 'a': case 'A':{
goto zacatek;
}
default:{
printf("Neplatna instrukce.\n\n");
goto operace;
}
}
konec:
fclose(mena);
puts("\nKonec programu.");
return 0;
}
I'm a bit confusion, but it'll be okay. I have few questions in code.
(Don't be angry, again in my langauge, but i hope u will not need theese words.)