//get choice input
int n;
scanf ("%d",&n);
// print the option that the user entered i.e. you chose option 2
printf("you chose option %n /n" ,n);
抱歉新手问题;我之前没有做过C编码!
答案 0 :(得分:3)
有两个问题。第一个%n
(可怕地)是一个输出项;它写入指向int
的指针 - 并且不向它提供指向int
的指针,因此您调用未定义的行为。使用%i
或%d
(通常为%d
)表示普通(带符号)整数。
在输出换行符或程序终止之前,您也不会看到printf()
输出,因为您错误输入了换行符转义序列(它是\n
,而不是/n
) 。因此,您的代码
printf("you chose option %n /n" ,n);
应修改为:
printf("you chose option %d\n", n);
最后(现在),您还应该验证来自scanf()
的返回值;如果它告诉您无法转换任何内容,则不应尝试使用n
:
if (scanf("%d", &n) == 1)
printf("you chose option %d\n", n);
else
printf("Oops - failed to read an integer from your input\n");
请注意,如果用户键入“a”(比如说),那么读取整数的重试次数将无效。您可能需要吞噬输入的其余部分:
else
{
printf("Oops - failed to read an integer from your input\n";
int c;
while ((c = getchar()) != EOF && c != '\n')
;
}
现在可以安全地回去再试一次。
答案 1 :(得分:2)
我看到该代码的唯一问题是来自printf
的描述符。它应该是%d
。新行也是\n
而不是/n
(但这不会导致任何问题)。所以试试这个:
#include <stdio.h>
void main()
{
//get choice input
int n;
scanf ("%d",&n);
// print the option that the user entered i.e. you chose option 2
printf("you chose option %d \n" ,n);
}