» Poradna » Programy

Existuje třeba nějaká podmínka, která je závislá na datovém typu proměnné?

 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Dobrý den,Potřeboval bych poradit s mým programem v Jazyce C.#include <stdio.h>int main() { int volba; int cyklus = 1; printf("Vitejte v programu. Zvolte jednu z moznosti stiskem prislusne klavesy a pote stisknete klavesu Enter.\n"); printf("1-Zobrazeni vlastnosti prvku dle jeho pozice v PSP\n" "2-Zobrazeni vzorce chemicke slouceniny\n" "3-Vypocet slozeni roztoku pomoci hmotnostniho zlomku\n" "4-Zobrazeni nazvu organicke slouceniny dle zadaneho slozeni\n" "5-Vypocet hustoty obyvatelstva na urcitem uzemi\n"); while (cyklus == 1) { printf("\nHlavni menu: Vase volba je: "); scanf_s("%d", &volba); if (volba == 1) { int prvek; printf(""); printf("Zvolte prvek:\n" "1-Zlato\n" "2-Dusik\n" "3-Horcik\n" "4-Zelezo\n" "5-Rtut\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &prvek); if (prvek == 1) { printf("\nNazev: Zlato" "\nRadi se mezi: Kovy" "\nSkupenstvi: Pevne" "\nProtonove cislo: 79\n"); } else if (prvek == 2) { printf("\nNazev: Dusik" "\nRadi se mezi: Nekovy" "\nSkupenstvi: Plynne" "\nProtonove cislo: 7\n"); } else if (prvek == 3) { printf("\nNazev: Horcik" "\nRadi se mezi: Kovy alkalickych zemin" "\nSkupenstvi: Pevne" "\nProtonove cislo: 12\n"); } else if (prvek == 4) { printf("\nNazev: Zelezo" "\nRadi se mezi: Kovy" "\nSkupenstvi: Pevne" "\nProtonove cislo: 26\n"); } else if (prvek == 5) { printf("\nNazev: Rtut" "\nRadi se mezi: Kovy" "\nSkupenstvi: Kapalne" "\nProtonove cislo: 80\n"); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-5.\n"); } } else if (volba == 2) { int prvek; printf(""); printf("\nZvolte prosim slouceninu u ktere chcete zobrazit chemicky vzorec."); printf("\n1-Voda\n" "2-Oxid uhlicity\n" "3-Ethanol\n" "4-Kuchynska sul(Chlorid sodny)\n" "5-Kyselina sirova\n" "6-Oxid zelezity\n" "7-Methan\n" "8-Sirouhlik\n" "9-Amoniak\n" "10-Hydroxid sodny\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &prvek); if (prvek == 1) { printf("\nVybral jste Vodu a ta ma chemicky vzorec H2O\n"); } else if (prvek == 2) { printf("\nVybral jste Oxid uhlicity a ten ma chemicky vzorec CO2\n"); } else if (prvek == 3) { printf("\nVybral jste Ethanol a ten ma chemicky vzorec C2H5OH\n"); } else if (prvek == 4) { printf("\nVybral jste Kuchynskou sul a ta ma chemicky vzorec NaCl\n"); } else if (prvek == 5) { printf("\nVybral jste Kyselinu sirovou a ta ma chemicky vzorec H2SO4\n"); } else if (prvek == 6) { printf("\nVybral jste Oxid zelezity a ten ma chemicky vzorec Fe2O3\n"); } else if (prvek == 7) { printf("\nVybral jste Methan a ten ma chemicky vzorec CH4\n"); } else if (prvek == 8) { printf("\nVybral jste Sirouhlik a ten ma chemicky vzorec CS2\n"); } else if (prvek == 9) { printf("\nVybral jste Amoniak a ten ma chemicky vzorec NH3\n"); } else if (prvek == 10) { printf("\nVybral jste Hydroxid sodny a ten ma chemicky vzorec NaOH\n"); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-10.\n"); } } else if (volba == 3) { float latka; float roztok; printf("\nZadejte hmotnost latky rozpustene v roztoku v gramech nebo mililitrech: "); scanf_s("%f", &latka); printf("Zadejte hmotnost roztoku v gramech nebo mililitrech: "); scanf_s("%f", &roztok); float cel = latka + roztok; float vysledek = latka / cel; printf("\nRoztok obsahuje %f gramu nebo mililitru dane latky.", vysledek); float proc = vysledek * 100; printf("\nTo je %1.f procent roztoku.", proc); printf("\n"); } else if (volba == 4) { int c; int vazba; printf("\nZadejte pocet uhliku. 1-3"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &c); if (c == 1) { printf("\nZvolte vazbu:\n" "1-Jednoducha\n" "2-Dvojna\n" "3-Trojna\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &vazba); if (vazba == 1) { printf("Je to Methan\n"); } else if (vazba == 2) { printf("Neexistuje\n"); } else if (vazba == 3) { printf("Neexistuje\n"); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-3.\n"); } } else if (c == 2) { int vazb; printf("\nZvolte vazbu:\n" "1-Jednoducha\n" "2-Dvojna\n" "3-Trojna\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &vazb); if (vazb == 1) { printf("Je to Ethan\n"); } else if (vazb == 2) { printf("Je to Ethen\n"); } else if (vazb == 3) { printf("Je to Ethyn\n"); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-3.\n"); } } else if (c == 3) { int vaz; printf("\nZvolte vazbu:\n" "1-Jednoducha\n" "2-Dvojna\n" "3-Trojna\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &vaz); if (vaz == 1) { printf("Je to Propan\n"); } else if (vaz == 2) { printf("Je to Propen\n"); } else if (vaz == 3) { printf("Je to Propyn\n"); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-3.\n"); } } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-3\n"); } } else if (volba == 5) { float s; float p; int kraj; printf("\nZadejte prosim pocet obyvatel: "); scanf_s("%f", &s); printf("\nVyberte Kraj:\n" "1-Praha\n" "2-Stredocesky kraj\n" "3-Jihocesky kraj\n" "4-Plzensky kraj\n" "5-Karlovarsky kraj\n" "6-Ustecky kraj\n" "7-Liberecky kraj\n" "8-Kralovehradecky kraj\n" "9-Pardubicky kraj\n" "10-Kraj Vysocina\n" "11-Jihomoravsky kraj\n" "12-Olomoucky kraj\n" "13-Moravskoslezsky kraj\n" "14-Zlinsky kraj\n"); printf("\nVase volba je: "); printf(""); scanf_s("%d", &kraj); if (kraj == 1) { printf("\nZvolil jste Prahu a ta ma rozlohu 496 km2."); p = 496; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 2) { printf("\nZvolil jste Stredocesky kraj a ten ma rozlohu 10 929 km2."); p = 10929; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 3) { printf("\nZvolil jste Jihocesky kraj a ten ma rozlohu 10 056 km2."); p = 10056; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2\n", h); } else if (kraj == 4) { printf("\nZvolil jste Plzensky kraj a ten ma rozlohu 7649 km2."); p = 7649; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 5) { printf("\nZvolil jste Karlovarsky kraj a ten ma rozlohu 3314 km2."); p = 3314; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 6) { printf("\nZvolil jste Ustecky kraj a ten ma rozlohu 5335 km2."); p = 5335; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 7) { printf("\nZvolil jste Liberecky kraj a ten ma rozlohu 3163 km2."); p = 3163; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 8) { printf("\nZvolil jste Kralovehradecky kraj a ten ma rozlohu 4759 km2."); p = 4759; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 9) { printf("\nZvolil jste Pardubicky kraj a ten ma rozlohu 4519 km2."); p = 4519; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 10) { printf("\nZvolil jste kraj Vysocina a ten ma rozlohu 6796 km2."); p = 6796; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 11) { printf("\nZvolil jste Jihomoravsky kraj a ten ma rozlohu 7195 km2."); p = 7195; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 12) { printf("\nZvolil jste Olomoucky kraj a ten ma rozlohu 5267 km2."); p = 5267; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 13) { printf("\nZvolil jste Moravskoslezsky kraj a ten ma rozlohu 5427 km2."); p = 5427; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else if (kraj == 14) { printf("\nZvolil jste Zlinsky kraj a ten ma rozlohu 3963 km2."); p = 3963; float h = s / p; printf("\nHustota obyvatel je: %f obyvatel na jeden km2.\n", h); } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-14.\n"); } } else { printf("Zadal jste neplatne cislo nebo znak. Prosim zadejte cislo 1-5.\n"); continue; } printf("\nPrejete si:" "\n1-vratit se do hlavniho menu" "\n2-Ukoncit program"); printf("\nVase volba je: "); scanf_s("%d", &cyklus); }}Problém je, že když do proměnné volba zadáte písmeno nebo znak tak se celý program zacyklí. Já bych potřeboval aby buď vás to hodilo zpátky do vstupu pro proměnnou volba, nebo aby se vám zobrazila možnost jestli se chcete vrátit do hlavního menu, nebo jestli chcete ukončit program.

Odpovědi na otázku

 |   |  Microsoft Windows 7 Firefox 60.0
 |   |  Microsoft Windows 10 Chrome 74.0.3729.169

Misto scanf pouzij fgets() a pak preved vstup pomoci strtol(). Pokud se to podari, vis, ze nekdo zadal cislo.Nebo testuj navratovou hodnotu scanf na pocet argumentu, ktere se podarilo prevest, ale to ti nebude fungovat, pokud nekdo zada treba 1.1 nebo 1 2

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Firefox 31.0

A co takhle zkusit regulární výrazy?Třeba: ^[0-9]*$

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux Firefox 67.0

1. Pastebin, tohle je hruza

Souhlasím  |  Nesouhlasím  |  Odpovědět

Související témata: Obyvatel, Prvek, Podmínka, Znak, Vazba, Oxid, Kovy, Roztok, Cyklus, Amoniak, Zlato, Celý program, NaCl, Kyselina, Chlorid


Určitě si přečtěte

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

** Je sice z Aliexpressu, ale funguje ** Můžete ji ovládat hlasem přes Amazon Echo nebo Google Home ** Za tři stovky zautomatizuje menší 230V spotřebič

Jakub Čížek | 102

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

Podívejte se, jak vypadá mikrofon nebo blecha pod elektronovým mikroskopem

** Z Brna pochází třetina světové produkce elektronových mikroskopů ** První československý kus vyrobila Tesla už v 50. letech ** Dnes na ni navazuje třeba brněnský Tescan

Jakub Čížek | 19

Bývalý zaměstnanec Nokie vysvětluje, proč telefony s Windows Phone neuspěly

Bývalý zaměstnanec Nokie vysvětluje, proč telefony s Windows Phone neuspěly

** Za neúspěchem Microsoftu v mobilech stojí i Windows 8 ** Microsoft pozdě naskočil do rozjetého vlaku ** Uživatelé neměli zásadní důvody, proč přejít

Karel Kilián | 138

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

Jak funguje kontroverzní program, který ženám krade plavky. Mají se čeho bát?

** Strojové učení ještě nepřitáhlo takový zájem jako na začátku prázdnin ** Ne, umělá inteligence nenašla lék na rakovinu ** Naučila se svlékat ženy nejen z plavek

Jakub Čížek | 35


Aktuální číslo časopisu Computer

Megatest 20 procesorů

Srovnání 15 True Wireless sluchátek

Vyplatí se tisknout fotografie doma?

Vybíráme nejlepší základní desky