我知道使用 scanf 和 fgets 的区别和优点/缺点。
我不明白 printf 和这两个 C 标准函数之间的关系。
我有这个简单的代码:
void print_choice(char * list, char * choice)
{
/* check parameters */
if(!list || !choice)
return;
printf("list of users: %s\n", list);
printf("Choice -- ? ");
/* scanf("%s", &choice); */
/* fgets(choice, 20, stdin); */
}
int main()
{
char choice[20];
char * list = "marco:dario:roberto:franco";
print_choice(list, choice);
printf("choice = %s\n", choice);
return 0;
}
如果我使用 fgets
,printf 会在标准输出上正确打印结果;
如果我使用 scanf
,printf` 不会在标准输出上打印任何内容。
为什么会出现这种行为?
最佳答案
您使用了 scanf("%s", &choice);
将 char **
传递给 scanf()
当它需要一个char *
.
删除 &
。
如果您的编译器没有报错,则说明您没有打开足够多的警告,或者您需要更好的编译器。
关于c - "scanf with printf"与 "fgets with printf",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287232/