所以我正在研究基本的C技能,我想设计一个代码,输入尽可能多的数字。然后,它应显示正,负和&的计数。输入零整数。 我搜索了Google&堆栈溢出。根据那些程序,代码似乎很好。 它编译和编译运行。但是每当我在提示后输入任何东西"输入更多? y / n",它返回代码.. 请看下面的代码:
#include<stdio.h>
int main()
{
int no,count_neg=0,count_pos=0,count_zero=0;
char ch='y';
clrscr();
do
{
puts("Enter number");
scanf("%d",&no);
if (no>0)
count_pos++;
else if (no<0)
count_neg++;
else
count_zero++;
puts("want more? - y/n ");
scanf("%c",&ch);
}
while (ch=='y');
if (ch=='n')
{
printf("No of positives = %d",count_pos);
printf("No of negatives = %d",count_neg);
printf("No of zeros = %d",count_zero);
}
getch();
return 0;
}
答案 0 :(得分:1)
问题出在&#34; scanf(&#34;%c&#34;,&amp; ch);&#34;
实际发生的是:
假设你进入&#39; y&#39;作为选择并点击“输入”(返回),返回是一个字符和
它的字符值为10(因为它是一个新行字符),因此scanf采用&#39; return&#39;
作为其输入并继续。
解决方案: 1.在scanf()之前使用getchar()
//你的代码
getchar();
scanf();
//你的代码
getchar()将返回值作为输入,因此您将保留实际值。
当scanf()遇到&#39; \ n&#39;它跳过它的角色(谷歌关于scanf,知道如何
以及为什么),因此将预期值存储在&#39;中。
答案 1 :(得分:0)
A&#34;更好&#34;表格:
int main()
是:
int main(void)
clrscr 不是标准C.
您应该检查任何可能表示“#34;有趣状态”的函数的返回值,&#34;例如失败条件,你可以从中优雅地处理这种情况。在这种情况下, scanf 就是这样一个功能。
我相信您的第一个执行...而条件将会变为false,因为它会在您的第一个 scanf 之后选择换行符字符呼叫。您可能希望阅读 getchar 或 getc ,而不是使用 scanf 来检查是否再次运行循环。你可以&#34;吃&#34;不需要的字符,包括换行符。
答案 2 :(得分:0)
在这里,我已经纠正了这个问题。问题在于&#34;进入&#34;你按下每个数字后面的一个字符,并由scanf()处理,因为它是扫描一些字符。所以我在getchar();
之前添加了scanf();
,因此&#34;输入&#34;由getchar();
占用,scanf()现在可以自由地接受您的输入。
#include<stdio.h>
int main()
{
int no,count_neg=0,count_pos=0,count_zero=0;
char ch='y';
clrscr();
do
{
puts("Enter number");
scanf("%d",&no);
if(no>0)
count_pos++;
else if(no<0)
count_neg++;
else
count_zero++;
puts("want more? - y/n ");
getchar();//<---- add this here
scanf("%c",&ch);
}
while(ch=='y');
if(ch=='n')
{
printf("No of positives = %d",count_pos);
printf("No of negatives = %d",count_neg);
printf("No of zeros = %d",count_zero);
}
getch();
return 0;
}
答案 3 :(得分:-1)
修复输入是使用像此scanf一样的C字符串(&#34;%s&#34;,...);
如果你输入多个字符,这可能会中断,因为scanf会一直读到用户点击进入,而你的ch变量只有一个字符的空间。
答案 4 :(得分:-1)
我在在线编译器中运行你的代码。我不确定其他编译器。
我略微改变了你的代码。即,首先我读取char然后int。如果我不改变顺序, char变量保持int变量值。这就是原因(ch变量保存无变量的值)。
#include<stdio.h>
int main()
{
int no,count_neg=0,count_pos=0,count_zero=0;
char ch='y';
do
{
puts("Enter number");
scanf("%c",&ch);
scanf("%d",&no);
if(no>0)
count_pos++;
else if(no<0)
count_neg++;
else
count_zero++;
puts("want more? - y/n ");
}
while(ch=='y');
if(ch=='n')
{
printf("No of positives = %d",count_pos);
printf("No of negatives = %d",count_neg);
printf("No of zeros = %d",count_zero);
}
return 0;
}
编辑: 每当通过键盘读取整数和字符时。它存储int值并输入键值。所以这就是原因。
你必须添加
scanf("%d",&no);
you code
......
.....
fflush(stdin);
scanf("%c",&ch);
答案 5 :(得分:-1)
使用:
ch = getche();
而不是:
scanf("%c", &ch);