Путаница с scanf () или if () - PullRequest
1 голос
/ 01 июня 2019

Я не очень знаком с C. Поэтому, возможно, кто-то легко найдет решение, я не против, если вы поделитесь им. После ввода данных в первый метод scanf () всегда выдает опцию else (): «Ошибка».

Я искал возможные варианты решения проблемы. Я нашел много таких вещей, но ничего особенного, чтобы помочь мне Я думаю, что ошибка в strcmp (). Но не могу точно сказать. Ты поможешь?

#include <stdio.h>
#include <string.h>

int main()
{
        float celsius, fahrenheit;
        char tempConvering[10];

        printf("Enter what to convert to what (F to C; C to F): ");
        scanf(" %s", &tempConvering[10]);

        if(strcmp(tempConvering, "F to C") == 0)
        {
            printf("\nEnter temperature in Fahrenheit: ");
            scanf(" %f", &fahrenheit);
            celsius = fahrenheit * 1.8 + 32;
            printf("%.2f Fahrenheits = %.2f Celsius\n", fahrenheit, celsius);
        }
        else if(strcmp(tempConvering, "C to F") == 0)
        {
            printf("\nEnter temperature in Celsius: ");
            scanf(" %f", &celsius);
            celsius = (fahrenheit - 32) / 1.8;
            printf("%.2f Celsius = %.2f Fahrenheits\n", celsius, fahrenheit);
        }
        else
        {
            puts("\nError!");
        }
}

Ответы [ 3 ]

1 голос
/ 01 июня 2019
#include <stdio.h>
#include <string.h>

int main()
{
        float celsius, fahrenheit;
        char tempConvering[20];

        printf("what do you want to convert? ");
        scanf("%s", tempConvering);

        if(strcmp(tempConvering, "Fahrenheits") == 0)
        {
            printf("Enter temperature in Fahrenheit: ");
            scanf("%f", &fahrenheit);
            celsius = (fahrenheit - 32) / 1.8;
            printf("%.2f Fahrenheits = %.2f Celsius\n", fahrenheit, celsius);
        }
        else if(strcmp(tempConvering, "Celsius") == 0)
        {
            printf("Enter temperature in Celsius: ");
            scanf("%f", &celsius);
            fahrenheit = celsius * 9 / 5 + 32;
            printf("%.2f Celsius = %.2f Fahrenheits\n", celsius, fahrenheit);
        }
        else
        {
            puts("\nError!");
        }
}

Это был ответ. Я должен поблагодарить вас за советы, я постараюсь запомнить все подробности о scanf (). Однако проблема исчезла только тогда, когда я изменил желаемый ответ не на «F на C», а на «Фаренгейты». Ну и соответственно я изменил вопрос. Программа моментально заработала. Тем не менее, попытки что-то сделать с помощью scanf () безуспешны, поскольку с fgets () происходит то же самое.

В любом случае как-то проблема решена, всем спасибо!

1 голос
/ 01 июня 2019

Я полагаю, есть ошибка в том, как вы используете scanf, в частности, на данный момент:

scanf(" %s", &tempConvering[10]);
                  ^
                  |
                  +---- here

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

scanf(" %s", tempConvering);

Это говорит "поместите строку в буфер с именем tempConverting." Если вы только начинаете работать с C и не очень много узнали о указателях и массивах, хорошее эмпирическое правило заключается в том, что если вы читаете строку с помощью `scanf, вы должны просто дать имя переменной массива, в которой вы хотите сохранить строку вместо использования амперсанда.

Надеюсь, это поможет!

0 голосов
/ 01 июня 2019

Не ставьте лишний пробел при выполнении функции scanf().

Иногда это может быть проблемой!

Это должно работать нормально:

scanf("%s", tempConvering);

Кстати, пока вы берете строку в качестве ввода, нет необходимости использовать & перед именем строки.

Кто-то уже описал детали выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...