gpt4 book ai didi

c - while 不循环吗?

转载 作者:行者123 更新时间:2023-11-30 18:45:00 26 4
gpt4 key购买 nike

我是一个刚开始学习C语言的初学者,我想用C语言编写一个程序,帮助用户输入编号。只要他们想要多少,一旦完成,程序就会显示不。输入的正数、负数和零。我正在尝试使用 do-while lopp 来做到这一点。它执行一次,但不会循环。我想知道我在这里做错了什么?

#include <stdio.h>
int main ()
{
int a,p=0,n=0,z=0;
char c;

do
{
printf("enter a no.\n");
scanf("%d", &a);

if (a>0)
{
p++;
}
else if (a==0)
{
z++;
}
else if(a<0)
{
n++;
}

printf("input more no.? y or n\n");
scanf("%c\n", &c);
} while (c=='y');

printf("the total count of positive, negative and zeros are %d %d %d\n", p,n,z);

return 0;
}

预期结果是:

enter a no.

4

input more no.? y or n

y

enter a no.

3

input more no.? y or n

y

enter a no.

-1

input more no.? y or n

n

最终正数、负数和零的个数为 2 1 0

但实际输出是:

enter a no.

4

input more no.? y or n

y

最终正数、负数和零的个数均为 1 0 0

最佳答案

您的问题是两个独立问题的组合。

第一个是 scanf 格式字符串中的任何空白字符都会告诉 scanf 读取(并丢弃)输入中的任何连续空白。

但是要知道输入中的空白在哪里结束,它需要看到不是空白的内容。这就是为什么格式字符串中的尾随空格会迫使您(用户)输入其他内容。

第二个问题是,对于之前的输入操作(scanf("%d", &a)),您可能按下了Enter键来“发送”输入到程序。这个 Enter 键将作为换行符(这是一个空白字符)放入输入缓冲区中。然后,当您使用 "%c" 格式读取字符时,它将读取该换行符。您需要跳过该换行符。

这两个问题的解决方式相同:要求 scanf 读取(并丢弃)前导空格。这是通过将空格放在格式字符串的开头来完成的,如

scanf(" %c", &c);
// ^
// Note space here instead

另请注意,只有 "%c""%[" 格式需要显式跳过前导空格,所有其他格式都会隐式执行此操作.

关于c - while 不循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com