|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <string.h>
struct
{
char name[10];
int total;
}leader[3] = { {"ben",0},{"tony",0},{"hans",0} };
void main()
{
int i;
char names[20];
do
{
printf("请输入一个名字,以便计票。\n");
scanf_s("%s", names);
for (i = 0; i < 3; i++)
{
if (strcmp(names, leader[i].name) == 0)
{
leader[i].total++;
}
else
{
printf("error\n");
}
}
} while (names[0] != 32);
for (i = 0; i < 3; i++)
{
printf("%s", leader[i].name);
printf("%d\n", leader[i].total);
}
}
你的程序有几个问题,帮你修改了,并做了注释
另外,还有个地方帮你优化了,就是for循环内的if…else…,你写的这个if…else…会导致不管你输入的名字对不对,都至少会输出两次error
- #include <stdio.h>
- #include <string.h>
- struct
- {
- char name[10];
- int total;
- }leader[3] = { {"ben",0},{"tony",0},{"hans",0} };
- void main()
- {
- int i,flag;
- char names[20];
- do
- {
- flag=1;//用于判断输入的名字是否在名字列表内
- printf("请输入一个名字,以便计票。\n");
- scanf_s("%s", names,20);//问题1:这个函数在读取输入字符串的时候要写上读取长度,不知道现在的版本是否需要写上长度参数,若不需要的话,这一条就当我没说。
- for (i = 0; i < 3; i++)
- {
- if (strcmp(names, leader[i].name) == 0)
- {
- leader[i].total++;
- flag=0;
- break;
- }
- }
- if (flag && names[0] !=35)
- printf("error\n");
- getchar();//问题2:这里需要写上getchar()用来清除scanf遗留下来的回车字符
- } while (names[0] !=35);//问题3:这里不能以空格作为结束字符,因为空格在 scanf中很特殊,需要换成其他字符,我改成了'#'
- for (i = 0; i < 3; i++)
- {
- printf("%s", leader[i].name);
- printf("%d\n", leader[i].total);
- }
- }
复制代码
|
|