Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Začátečník v céčku

Ahoj začínám se učit programovat v jazyce C a mám malý problém. Měl jsem za úkol sestrojit jednoduchou kalkulačku to jsem zvládl, ale ještě bych potřeboval, aby po dělení když výsledek vyjde celý číslo tak, aby mi to nevyhazovala zbytečně zbytek po dělení 0. Nevím jak to vyřešit, zřejmě nějakou podmínkou ale nevím jak.
Díky za radu

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

int main()
{
    int i,j;
    float k;
    char c;
    ano:
    printf("Zadej cislo a operaci [+,-,*,/,%%] a druhe cislo bez mezer:\nnapr 15*5:\n ");
    while (1) { 

        if (scanf("%d%c%d",&i,&c,&j)==3) 
            break;

        else{
        printf("Chyba v zadani!!!\nZkus znova!\n");

        while (getchar()!='\n')
                ;
            }
        }

    switch(c){

    case '+':
            k=i+j;
            printf("\nScitani \n %d + %d = %3.2f\n",i,j,k);
            break;

    case '-':
            k=i-j;
            printf("\nOdcitani \n %d - %d = %3.2f\n",i,j,k);
            break;

    case '*':
            k=i*j;
            printf("\nNasobeni \n %d * %d = %3.2f\n",i,j,k);
            break;

    case '/':
            if (j==0){
            printf ("Nulou nelze delit!!!\n");
            break;
            }
            k=(float)i/(float)j;
            printf("\nDeleni \n %d / %d = %3.2f\n",i,j,k);


    case '%':
            k=i%j;
            printf("\nZbytek po deleni \n %d %% %d = %3.2f\n",i,j,k);
            break;


    default:
        printf("\nSpatne zadano, zkus znova!"); 
        break;
    }
    char znak;

    printf("Chces pokracovat? [A/N]:\n");

    while (getchar()!='\n')
            ;
    znak=getchar();
    if ((znak == 'a')||(znak == 'A'))
        goto ano;
    if ((znak == 'n')||(znak == 'N'))
        goto ne;

        printf("Mel jsi stisknout \'a\' nebo \'n\' a nikoli \'%c\'",znak);

    ne:
    printf("Konec programu, dekuji za pouziti\n\n");



    return 0;
}
Předmět Autor Datum
#include <stdio.h> #include <stdlib.h> int main() { int i,j; float k; char c; ano: printf("Zadej cis…
Flash_Gordon 21.03.2013 18:03
Flash_Gordon
Díky moc za radu
Tomas321 21.03.2013 18:06
Tomas321
A teraz ked tam napise na vstup 10%2 tak mu to nevypise ziaden vysledok :-D
MM.. 21.03.2013 18:11
MM..
Ha. On má tam i % - zbytek jako samostatnou operaci (funkci). poslední
Flash_Gordon 21.03.2013 18:18
Flash_Gordon
Za prve nepouzivaj float ale double. Nielen ze to ma vyssiu presnost ale aj printf %f potrebuje doub…
MM.. 21.03.2013 18:07
MM..
Aha uz asi chapem co chces, napriklad: case '/': if (j==0){ printf ("Nulou nelze delit!!!\n"); brea…
MM.. 21.03.2013 18:13
MM..
#include <stdio.h>
#include <stdlib.h>

int main()
{
int i,j;
float k;
char c;
ano:
printf("Zadej cislo a operaci [+,-,*,/,%%] a druhe cislo bez mezer:\nnapr 15*5:\n ");
while (1) {

if (scanf("%d%c%d",&i,&c,&j)==3)
break;

else{
printf("Chyba v zadani!!!\nZkus znova!\n");

while (getchar()!='\n')
;
}
}

switch(c){

case '+':
k=i+j;
printf("\nScitani \n %d + %d = %3.2f\n",i,j,k);
break;

case '-':
k=i-j;
printf("\nOdcitani \n %d - %d = %3.2f\n",i,j,k);
break;

case '*':
k=i*j;
printf("\nNasobeni \n %d * %d = %3.2f\n",i,j,k);
break;

case '/':
if (j==0){
printf ("Nulou nelze delit!!!\n");
break;
}
k=(float)i/(float)j;
printf("\nDeleni \n %d / %d = %3.2f\n",i,j,k);


case '%':
k=i%j;

if (k != 0)  {
printf("\nZbytek po deleni \n %d %% %d = %3.2f\n",i,j,k);
}
break;


default:
printf("\nSpatne zadano, zkus znova!");
break;
}
char znak;

printf("Chces pokracovat? [A/N]:\n");

while (getchar()!='\n')
;
znak=getchar();
if ((znak == 'a')||(znak == 'A'))
goto ano;
if ((znak == 'n')||(znak == 'N'))
goto ne;

printf("Mel jsi stisknout \'a\' nebo \'n\' a nikoli \'%c\'",znak);

ne:
printf("Konec programu, dekuji za pouziti\n\n");



return 0;

Za prve nepouzivaj float ale double. Nielen ze to ma vyssiu presnost ale aj printf %f potrebuje double, teraz to tam cita nejake bajty zo zasobnika ktore patria neicomu uplne inemu t.j. bude ti to nahodne vypisovat namiesto vysledku uplne nezmysly.

Za druhe zbytok po deleni je celociselna operaica takze vysledok je integer a ne float. Tak si to zmen na integer.

Za tretie vobec nechapem dotaz teda ze co vlastne chces :-D

Aha uz asi chapem co chces, napriklad:

case '/':
if (j==0){
printf ("Nulou nelze delit!!!\n");
break;
}
k=(float)i/(float)j;
printf("\nDeleni \n %d / %d = %3.2f\n",i,j,k);
if(i%j == 0)
break;

inac cely program je tak trochu nezmysel ptz na vstup nemozes dat desatinne cisla. Slusne sa to riesi cele uplne inac.

Zpět do poradny Odpovědět na původní otázku Nahoru