如何强制程序识别单词并停止

时间:2018-03-19 23:10:25

标签: c variables

我遇到与输入类型的不同类型变量相关的问题。 我的程序很简单。我以摄氏度键入温度,程序打印摄氏度和华氏温度值,然后循环自身询问摄氏度的下一个值。如果输入" -99999"它会停止。 当我输入一个单词" elo"我想把它改成停止(它基本上意味着"再见"在波兰俚语:))但经过几个小时的尝试后我放弃了...... 我会感激任何帮助!

#include <stdio.h>

float fahrenheit(long);

int main()
{
    int celsius;
    printf("Type the temperature in celsius: ", &celsius);
    scanf_s("%ld", &celsius);

    while (celsius != -99999) {
        printf("%ld %6.1f\n", celsius, fahrenheit(celsius));
        printf("Type the temperature in celsius: ", &celsius);
       scanf_s("%ld", &celsius);
    }
}

float fahrenheit(long celsius)
{
    return (float) 1.8*celsius + 32.0;
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。我认为最简单的方法是检测scanf无法读取数字然后再回到字符串输入。

int celcius;
char buff[10];
bool elo = false;

int args_read = scanf(" %d", &celcius);
if (args_read < 1) {
    // User must have put in a non-number
    scanf(" %s", buff);

    if (strcmp(buff, "elo") == 0) {
        elo = true;
    }
}

答案 1 :(得分:0)

printf("Type the temperature in celsius: ", &celsius);很奇怪。你的编译器没有抱怨这个吗?为什么要提供celsius的地址作为此呼叫的参数?另一个错误是scanf_s("%ld", &celsius);,当您仅将celsius声明为long int时,会将celsius作为int值读入。在处理代码时始终启用编译器警告是个好主意。

@StephenDocy所述,您需要先将输入作为字符串读入,然后检查它是否为数字或停用词。

您还可以稍微简化代码,以避免重复printf("Type the temperature in celsius: ", &celsius);之类的行。我认为将celsius视为浮点值

也是有意义的
#include <stdio.h>
#include <string.h>

float fahrenheit(float);

int main() {
    float celsius;
    char input_buffer[256];

    while (1) {
        printf("Type the temperature in celsius:\n");
        scanf("%255s", input_buffer);
        if (strcmp("elo", input_buffer) == 0) break;
        if (sscanf(input_buffer, "%f", &celsius) == 1) {
            printf("%6.1f %6.1f\n", celsius, fahrenheit(celsius));
        }
    }
    return 0;
}

float fahrenheit(float celsius) {
    return 1.8 * celsius + 32.0;
}
相关问题