与scanf()或if()混淆

时间:2019-05-31 21:11:23

标签: c string if-statement scanf strcmp

我对C不太熟悉。因此,也许有人会很容易找到解决方案,我不介意您是否共享它。 在第一个scanf()中输入数据之后,始终提供选项else():“错误”。

我正在寻找可能的问题解决方案。我发现了很多类似的东西,但是没有什么可以帮助我的。我认为错误在于strcmp()。但是我不能肯定地说。你会帮忙吗?

import React from 'react';
import renderer from 'react-test-renderer';
import IndexPage from '../Page';

describe('test script execution', () => {
  test('adds 1 + 2 to equal 3', () => {
    expect(1 + 2).toBe(3);
  });
});

it('renders correctly', () => {
    const tree = renderer.create(<IndexPage />).toJSON();
    expect(tree).toMatchSnapshot();
});

3 个答案:

答案 0 :(得分:1)

我相信您在scanf的使用方式上存在错误,具体来说,在这一点上:

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

scanf的第二个参数应该是存储结果的位置的地址。在这里,您说的是“将读入的字符串放在我设置的缓冲区之后的内存中”,这可能不是您想要的。而是这样写:

scanf(" %s", tempConvering);

这说“将字符串放在名为tempConverting的缓冲区内”。如果您刚开始使用C并没有对指针和数组有太多了解,一个很好的经验法则是,如果您使用`scanf读取一个字符串,则应仅在您要输入的位置给出数组变量的名称想要存储字符串而不是使用与号。

希望这会有所帮助!

答案 1 :(得分:1)

#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”而是改为“ Fahrenheits”时,问题才消失。好吧,我分别改变了这个问题。该计划立即获得。但是,尝试使用scanf()做某事的尝试失败了,以至于fgets()发生了同样的事情。

无论如何,解决问题的方式,谢谢大家!

答案 2 :(得分:-3)

在执行scanf()函数时不要放置多余的空间。

有时候这可能是个问题!

这应该可以正常工作:

scanf("%s", tempConvering[10]);

顺便说一句,当您将字符串作为输入时,不需要在字符串名称前使用&

有人已经在上面描述了细节。