如何使用scanf获取用户在C中输入的数据?

时间:2011-11-28 21:35:05

标签: c scanf

    //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编码!

2 个答案:

答案 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); 
}