我想计算2名候选人的票数,并显示谁赢得了选举的结果,但是当用户说出有多少名选民时,该程序只运行应有的一半时间。另外,由于某种原因,问题总是出现两次,例如它是否通过循环但什么都不做(如果n是奇数,它会下降。
我也尝试过使用“ for”循环来完成此操作,但是我遇到了同样的问题
#include<stdin.h>
#include<stdlib.h>
void main()
{
int sumj=0,summ=0,counter=0,n;
char vote;
printf("how many electors are there?\n");
scanf("%d",&n);
do
{
printf("Whats your vote? m for maria j for james\n");
scanf("%c",&vote);
if (vote=='j')
{
sumj++;
}
if (vote=='m')
{
summ++;
}
counter++;
} while (counter<n);
if (sumj>summ)
printf("james won");
if (summ>sumj)
printf("maria won");
if (sumj==summ)
printf("its a tie");
}
答案 0 :(得分:2)
而且,由于某种原因,问题总是出现两次,例如它是否通过循环但什么都不做
当然,这是一个很大的提示...如果循环为每个输入执行两次,但第二次似乎没有执行任何操作,那么这可以解释为什么它似乎只执行预期次数的一半,对吧?
printf("Whats your vote? m for maria j for james\n");
scanf("%c",&vote);
嗯,scanf()
通常是这类问题的根源。您的scanf()
通话一次只能读取一个字符,对吗?但是,当您投票时,您要键入几个字符?我敢打赌,您输入的内容类似于j<return>
。那是两个字符,而不是一个。
在循环中的第一个if
上设置一个断点,看看击中一半的时间,vote
的值为\n
。
答案 1 :(得分:0)
Scanf返回空白字符。由于只查找'j'或'm',因此看不到它们,但每次循环时它仍在递增计数。
如果在循环中添加一条语句,您会看到以下内容:
do
{
...
printf("(vote='%c' counter=%d)\n", vote, counter);
...
} while (counter<n);
在我看来,如果您输入三个选举人,您的实际输入流为:“ 3”,“ \ n”,“ m”,“ \ n”。 3被scanf占用,但是'\ n'(当您按Enter键时)最终是第一票,'m'是第二票,另一个'\ n'是第三票。>
有几种方法可以解决此问题,但最简单的方法就是忽略任何非投票字符:
if (vote=='j')
{
sumj++;
counter++;
}
else if (vote=='m')
{
summ++;
counter++;
}
尽管空格字符仍然导致循环继续运行,但它无济于事。
答案 2 :(得分:0)
我正在为您提供Java代码,您已经在尝试使用其他输入,并且运行完整,
您的代码似乎应该运行就可以了,我所做的与您所做的相同,在这里,它循环遍历所有选民并提供获胜的输出...它计算的票数是sumj或summ并进行比较他们和谁赢的印刷品...希望我能提供等效的代码来帮助您。
import java.lang.Math;
import java.util.*;
public class HelloWorld
{
public static void main(String[] args)
{
int sumj=0,summ=0,n;
char vote=0;
Scanner scan = new Scanner(System.in);
System.out.println("how many electors are there?");
n = scan.nextInt();
System.out.println("here are " + n + " Elector's are there\n\n");
for(int i=0;i<n;i++)
{
System.out.println("Whats your vote? m for maria j for james\n");
vote = scan.next().charAt(0);
if(vote == 'j')
{
sumj++;
}
else if(vote == 'm')
{
summ++;
}
}
if(sumj > summ)
{
System.out.println("james won");
}
else if(summ > sumj)
{
System.out.println("maria won");
}
else
{
System.out.println("It's a Tie");
}
}