我正在做作业,当我认为我最终做到了它无法在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");
}
答案 0 :(得分:1)
您错过了scanf_s
的参数,这会导致未定义的行为 - 这可能会也可能不起作用。它应该是
scanf_s("%s", a, (unsigned)sizeof a);
unsigned
施法的原因是什么? MSVC man page for scanf_s
说
size参数的类型为unsigned,而不是size_t。
并非所有编译器都会检查您是否为XscanXX
和XprintXX
个系列的所有字段提供了参数。例如,MSVC 9.0不会检查这些所谓的“更安全”函数以获取正确数量的参数,但是MSVC 14.0会这样做,从而产生编译错误。