代码仅在一个编译器中工作

时间:2015-12-21 17:36:57

标签: c

我正在做作业,当我认为我最终做到了它无法在Visual Studio中工作。  我有这样的代码,它在Dev C ++中工作得很好,但它不在Visual Studio中。你能解释一下为什么以及如何解决它。

编辑:它在两者中进行编译。在VS中,它的显示总是0,对于文本和整数应该是0,对于整数这个数字应该是0。

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

#define czy_cyfra( c )    (( c ) > '0' && ( c ) < '9' )
#define jaka_cyfra( c )   (( c ) - '0' )

int czy_liczba_calkowita(char * a)
{

    if (*a == '\0')
        return -1;
    do
    {
        if (!czy_cyfra(*a))
            return -1;
    } while (*++a != '\0');
    return 0;
}

int jaka_liczba(char * a)
{
    int liczba = 0;
    do
    {
        liczba = liczba * 10 + jaka_cyfra(*a++);
    } while (*a != '\0');
    return liczba;
}

int main()
{
    char a[255];
    printf("Wprowadz lancuch\n");
    scanf_s("%s", a);
    printf("%u", czy_liczba_calkowita(a) == 0 ? jaka_liczba(a) : 0);
    return 0;
    system("pause");
}

1 个答案:

答案 0 :(得分:1)

您错过了scanf_s的参数,这会导致未定义的行为 - 这可能会也可能不起作用。它应该是

scanf_s("%s", a, (unsigned)sizeof a);

unsigned施法的原因是什么? MSVC man page for scanf_s

  

size参数的类型为unsigned,而不是size_t。

并非所有编译器都会检查您是否为XscanXXXprintXX个系列的所有字段提供了参数。例如,MSVC 9.0不会检查这些所谓的“更安全”函数以获取正确数量的参数,但是MSVC 14.0会这样做,从而产生编译错误。