2015-12-21 57 views
-3

我在做功课,当我以为我终于没有在Visual Studio中工作。 我有这样的代码,它在Dev C++中工作得非常好,但它不在Visual Studio中。你能解释我为什么以及如何解决它。只能在一个编译器中工作的代码

编辑:它在两个编译。在VS中,它的显示总是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"); 
} 
+0

它在做什么或不做它应该做什么或应该做什么? – nicomp

+1

嗨,欢迎来到堆栈溢出!在发布有问题的代码时,您需要准确解释发生了什么问题。你的期望是什么?错误的确切文字是什么?它是运行时错误还是编译时错误?另外如果问题是关于C++的,那么不要将它标记为C.如果您将它编译为C++,那么它就是一个C++问题。最后,你通常需要产生一个最小的,完整的,可验证的例子,或者你的问题是脱离主题。请参阅帮助中心了解更多信息! –

+1

什么是scanf_s()没有大小参数? – EOF

回答

1

你已经错过了为scanf_s的参数,这导致不确定的行为 - 这可能会或可能无法正常工作。应该是

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

unsigned的原因铸造? MSVC man page for scanf_s

大小参数的类型是unsigned,而不是size_t。

并非所有的编译器检查是否已为XscanXXXprintXX家庭的所有领域提供的参数。例如,MSVC 9.0并不检查这些被认为对于正确数量的参数“安全”的函数,但MSVC 14.0会提供编译错误。

相关问题