以下给出的代码是错误的吗?

#include  int main() { int a; printf(scanf("%d",&a)); return 0; } 

我收到此消息“Segmentation fault(core dumped)”

printf()函数的格式为: –

 printf(const char *format, ...) 

您必须提供一个字符串格式说明符的格式字符串 )作为函数printf()参数。

你可以试试: –

 printf("%d",scanf("%d",&a)); // with format string 

如果扫描成功,将打印1 。 这里%dinteger参数的格式字符串

要读取和打印变量a ,请尝试: –

  scanf("%d",&a); // reading printf("%d",a); // printing 

阅读编译器警告。

 prog.c:8:12: warning: passing argument 1 of 'printf' makes pointer from integer without a cast [-Wint-conversion] printf(scanf("%d",&a)); ^~~~~ 

printf想要一个字符串作为第一个参数。 你给它一个整数。

你想打印’a’,所以你应该这样做

 scanf("%d",&a); printf("%d", a); 

scanf()返回写入链接的字符总数

scanf查看你的格式字符串,看到%d并将它与你提供的&a地址匹配。 如果在尝试读取值时出现错误, scanf将返回EOF ,否则它将返回成功匹配为int的项目数。 例如,如果键入123 ,则scanf("%d", &a) == 1为true,但如果键入q123 ,则scanf("%d", &a) == 0为true。

printf需要一个格式字符串,就像scanf一样,它使用该格式来打印参数的值。 它无法知道scanf使用的格式是否也是您想要用于打印的格式,并且您没有提供字符串,这是一种指针,包含打印参数的格式。 这是您的代码的问题。

整数(例如scanf返回的int值)可以转换为指针,而无需告诉编译器执行转换。 因此,编译器可能会抱怨您正在做一些可能存在问题的事情( 警告:传递’printf’的参数1使得指针来自整数而不进行强制转换 ),但该代码将被允许编译和执行。

当您看到类似的警告时,请查看该参数所需的函数类型以及您用作该参数的值的类型。 很可能编译器试图帮助你避免像printf(scanf("%d", &a));这样的错误printf(scanf("%d", &a));