do..while 循环中 scanf() 后的意外行为
Unexpected behavior after scanf() in do..while loop
你好我正在自学C语言
我的问题是,在使用采用 char 值的 scanf() 时,我是否遗漏了一些需要知道的信息?
为了练习 do...while 循环,我写了一些如下所示的代码,但它没有像我预期的那样工作。
#include <stdio.h>
int main()
{
char y_or_n;
int x =1;
int y;
do
{
printf("ENTER A NUMBER\n");
scanf("%d", &y);
printf("THE NUMBER WILL BE ADDED TO x WHICH IS %d\n", x);
x = x+y;
printf("x TURNED INTO %d\n", x);
printf("KEEP DOING THIS?(y/n)\n");
scanf(" %s", &y_or_n);
printf("x is %d\n", x);
}
while(y_or_n =='y');
printf("GOOD BYE\n");
return 0;
}
对于第一个循环,它按我预期的那样工作。
比如我输入7,x变成了8,但是执行scanf()后,x的值变成了0。
因此,从第二个循环开始,x 的值暂时变为 y 的值,然后再次变为 0。
我猜想 scanf() 函数有问题并稍微修改了代码:将 y_or_n 的类型更改为整数,以便 scanf() 取整数值。
修改后的代码如下
include <stdio.h>
int main()
{
int y_or_n;
int x =1;
int y;
do
{
printf("ENTER A NUMBER\n");
scanf("%d", &y);
printf("THE NUMBER WILL BE ADDED TO x WHICH IS %d\n", x);
x = x+y;
printf("x TURNED INTO %d\n", x);
printf("KEEP DOING THIS?(y/n)\n");
scanf(" %d", &y_or_n);
printf("x is %d\n", x);
}
while(y_or_n ==1);
printf("GOOD BYE\n");
return 0;
}
这次代码如我所料运行。
即使在执行 scanf() 之后,x 的值也没有更改为 0,并且每次我输入一个数字时,该数字都会添加到 x。
如果我的问题不清楚,请告诉我。
感谢阅读
%s
用于读取 null-terminated 字符串,因此将指针传递给 one-byte 缓冲区是错误的。
好像变量x
放在内存上的变量y_or_n
之后,写scanf()
终止null-character是设置值x
到 0.
要读取一个字符,请改用 %c
。
char y_or_n;
/* ... */
scanf(" %c", &y_or_n);
你好我正在自学C语言
我的问题是,在使用采用 char 值的 scanf() 时,我是否遗漏了一些需要知道的信息?
为了练习 do...while 循环,我写了一些如下所示的代码,但它没有像我预期的那样工作。
#include <stdio.h>
int main()
{
char y_or_n;
int x =1;
int y;
do
{
printf("ENTER A NUMBER\n");
scanf("%d", &y);
printf("THE NUMBER WILL BE ADDED TO x WHICH IS %d\n", x);
x = x+y;
printf("x TURNED INTO %d\n", x);
printf("KEEP DOING THIS?(y/n)\n");
scanf(" %s", &y_or_n);
printf("x is %d\n", x);
}
while(y_or_n =='y');
printf("GOOD BYE\n");
return 0;
}
对于第一个循环,它按我预期的那样工作。 比如我输入7,x变成了8,但是执行scanf()后,x的值变成了0。 因此,从第二个循环开始,x 的值暂时变为 y 的值,然后再次变为 0。 我猜想 scanf() 函数有问题并稍微修改了代码:将 y_or_n 的类型更改为整数,以便 scanf() 取整数值。
修改后的代码如下
include <stdio.h>
int main()
{
int y_or_n;
int x =1;
int y;
do
{
printf("ENTER A NUMBER\n");
scanf("%d", &y);
printf("THE NUMBER WILL BE ADDED TO x WHICH IS %d\n", x);
x = x+y;
printf("x TURNED INTO %d\n", x);
printf("KEEP DOING THIS?(y/n)\n");
scanf(" %d", &y_or_n);
printf("x is %d\n", x);
}
while(y_or_n ==1);
printf("GOOD BYE\n");
return 0;
}
这次代码如我所料运行。 即使在执行 scanf() 之后,x 的值也没有更改为 0,并且每次我输入一个数字时,该数字都会添加到 x。
如果我的问题不清楚,请告诉我。
感谢阅读
%s
用于读取 null-terminated 字符串,因此将指针传递给 one-byte 缓冲区是错误的。
好像变量x
放在内存上的变量y_or_n
之后,写scanf()
终止null-character是设置值x
到 0.
要读取一个字符,请改用 %c
。
char y_or_n;
/* ... */
scanf(" %c", &y_or_n);