2016-09-24 122 views
0

对于该代码的下方(C)Scanf_s读取错误输入

int small_a, small_b; 
    printf("Please input two numbers\n"); 
    scanf_s("%d %d", &small_a, &small_b); 
    printf("%d %d", &small_a, &small_b); 
    int test_2nd = small_a - small_b; 
    if (test_2nd < 0) { 
     printf("a is smaller %d", &small_a); 
    } 
    else { 
    printf("b is smaller %d", &small_b); 

当我写4和2是一个巨大的六位数字(5504620和5504608在这种情况下)将打印我不值了解它出错的地方。已包含stdio.h作为标题。

+0

'的printf( “%d%d”,&small_a,与small_b);'删除'&' - >'printf(“%d%d”,small_a,small_b);' – BLUEPIXY

+0

1)检查函数'scanf()'系列中的任何返回值,以确保操作成功。 2)当打印一个变量时,使用'printf()'传递实际变量,而不是变量的地址。 – user3629249

+0

建议您阅读如何提出问题的“帮助”部分。例如,当问题是关于运行时问题的问题时,因为您的问题是,编写干净的代码很小,并且仍然显示问题。 – user3629249

回答

2

这里的问题是在print语句中。在代码

printf("%d %d", &small_a, &small_b); 

你不需要()取(打印)地址。删除那&

这就是说,这实际上调用了undefined behavior%dprintf()需要int类型的参数,并且您实质上提供了int *,导致了UB。

FWIW,打印的地址(指针),你需要使用%p格式说明,并投了参数void *

+0

魔鬼在细节中吧?我想这只是打印地址。 – Ansh

+1

@Ansh当然。 __上帝在细节___。总是仔细检查。 –