Dobrý den,
dělám základy programování v "Céčku" a mám za úkol vytvořit kalkulačku která bude příjmat i desetinnou čárku
kalkulačka není problém, ale jak na tu desetinno učárku?
Hodil by se mi jakýkoliv TIP, rada, v případě hodně dobré vůle i funkce kterou by příkazový řádek akceptoval čárku i tečku.
Dopředu děkuji, Martin.
Fórum › C / C++
Desetinná čárka
To Martin :
Nevím, ale doteď jsem měl za to, že příkazovému řádku je úplně jedno, co mu napíšeš, přijme klidně i středník, nebo dvojtečku, nebo cokoliv jiného do něj z klávesnice naklapeš. A teprve program, který informace z příkazového řádku vyhodnocuje řeší, co s těma znakama bude dělat... Třeba čárky nahradit tečkama, nebo naopak...
Ak použiješ locale tak by mala funkcia scanf(3p) brať čísla na základe lokalizácie, čo by mohla byť aj čiarka v desatinnom čísle. Ale nie som istý (overiť si to musíš sám) a lokalizácia nie je spoľahlivá. Ak musíš načítať oboje tak asi načítaj čísla ako reťazec a potom nahradzuj čiarky bodkami a načítaj čísla buď cez strtod(3p) alebo sscanf(3p).
mám už sepsaný program která berte jak destinnou čárku tak i tečku a i velké desetinné místa. Ale výsledek mi to nehodí, nevím v čem je chyba
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
char num1[1000], num2[1000], result[1000];
scanf("%s",num1);
scanf("%s",num2);
int carry=result[1000]=0;
for (i=999; i>=0; i--)
{
int res=num1[i]-'0' + num2[i]-'0' + carry;
if (res>1000)
{
res-=1000;
carry=1000;
}
else
{
carry=1;
}
result[i]=res+'0';
}
printf("%s*%s=%s\n",num1,num2,result);
system("PAUSE");
return 0;
}
result[1000]=0
Když má pole 1000 prvků, tak jsou to prvky 0 až 999. Takže tu nulu vkládáš mimo to pole.
for (i=999; i>=0; i--)
int res=num1[i]-'0' + num2[i]-'0' + carry;
Ty do toho stringu zadáváš všech tisíc znaků?
result[i]=res+'0';
Tady zase nastavíš všech tisíc a nezůstane ti místo na ukončovač.
A samotná ta konverze je taky konina.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
double string2double(char *s)
{
double d;
char *p = strchr(s, ','), *end;
if (p) *p = '.';
d = strtod(s, &end);
if (*end != 0) d = 0;
return d;
}
int main(int argc, char * argv[])
{
char s1[] = "123.45", s2[] = "123,45";
double d1, d2;
setlocale(LC_NUMERIC, "C");
d1 = string2double(s1);
d2 = string2double(s2);
printf("%f %f\n", d1, d2);
return 0;
}
takže ze stringu je normmální číslo abych je mohl sečíst odečist atd ...
ale jak mám přehodit výsledek na string, aby mi hodil veliké číslo s velikým desetinným číslem ?? double mi na to nestačí
sem z toho jelen
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Desetinná čárka u int — založil Lukáš
Desetinná čárka - Výstup hodnoty — založil Xplosiv7
[DB] - chyba v sql update dotazu - přebývající čárka — založil psenik
Desetinná místa — založil lekejs
Desetinná místa — založil Jakub
Moderátoři diskuze