Код конвертации валюты не работает - как сравнивать строки - PullRequest
0 голосов
/ 18 апреля 2020

Я делаю простой конвертер валют, конвертируя из Swedi sh SEK в европейские евро или американские доллары. Когда должно быть распечатано преобразование, программа просто завершается. Visual Studio Code говорит, что с кодом нет проблем, поэтому я не понимаю причину этого.

Код:

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

int main (void)
{
    float SEK;
    const float EUR = 0.0920;
    const float USD = 0.1000;
    const float YEN = 10.7600;
    char currency [256];

    printf("Enter amount of money you want to convert in SEK: ");
    scanf("%f", &SEK);
    printf("Enter the desired currency to convert to: ");
    scanf(" %c", &currency);

    if (currency == "EUR") {
        printf("\nFor %.4f SEK, you get: %.4f EUR", SEK, SEK*EUR);
    }
    else if (currency == "USD") {
        printf("\nFor %.4f SEK, you get: %.4f USD", SEK, SEK*USD);
    }
    getchar();
    getchar(); //used to give me a proper end on output of my program
    return 0;
}

Ответы [ 2 ]

4 голосов
/ 18 апреля 2020

Сравнение строк в C использует функцию strcmp (). Вы не можете сделать это с помощью

 if (currency == "USD")

Добавить #include <string.h>, а затем

 if (strcmp (currency, "USD") == 0)

Также обратите внимание, что не тестирование возвращаемого значения из scanf это всегда ошибка . Вы думаете, что можете считать, что ввод правильно сформирован, но, в особенности, пользовательский ввод часто не выполняется.

Далее, чтобы прочитать строку, вы не можете использовать %c, но должны использовать %s. Не делайте этого вслепую, так много вопросов о том, как ограничить размер ввода, чтобы не переполнять ваш массив currency []. Ищите их. Если в нем упоминается fgets (), присмотритесь.

Вы также должны привыкнуть писать новые строки \n на конце строки, потому что именно тогда буферизованный вывод сбрасывается («появляется»). Windows отчасти нарушает добавление новой строки после завершения программы, что приводит к этой часто встречающейся мерзости printf ("\nwhatever").

0 голосов
/ 18 апреля 2020

В этом коде есть 2 основные проблемы:

  1. При использовании scanf вы ожидаете ввода char *, но% c принимает char. Измените его на% s.
  2. C не позволяет сравнивать строки с оператором '=='. Вместо этого вы должны использовать strcmp ().
...