为什么打印垃圾值

为什么打印垃圾值

我的代码是...

#include <stdio.h>
int main(){
    char name[20];
    int age;
    char department;
    double key;
    int i=0;
    while( (scanf("%c", &name[i])) == 1 ){
        i++;
    }
    name[i] = '\0';

    scanf("%d", &age);
    scanf("%c",&department);
    scanf("%lf",&key);


    puts(name);
    printf ("%d\n",age);
    printf("%c\n",department);
    printf("%g",key);

    return 0;
}


输入值为

mark
20
A
3.154


结果输出应与输入相同

mark
20
A
3.154


但是我得到的是...

mark
20
A
3.154

32766
�


我不知道在哪里

32766
�


来自...

最佳答案

代码

while( (scanf("%c", &name[i])) == 1 ){
    i++;
}


将读取它可以读取的所有字符,并且不会在mark的结尾处停止。

因此,该循环将全部四行读取到name中,然后scan调用失败,因为没有更多输入,这意味着agedepartmentkey值被保留在创建时具有任意价值。

换句话说,您的输出可以这样解释:

mark  \
20     \
A       >-- name
3.154  /
      /
32766    -- age (and probably nul for department)
�       -- key


如果要进行基于行的输入,this answer提供了方便的功能,包括缓冲区溢出保护等。对于字符串,只需按输入的方式使用它们,而非字符串可以使用缓冲区上的sscanf进行转换。

关于c - 为什么打印垃圾值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54564991/

10-11 21:20