求助printf和scanf输入二维字符串数组的问题

Arlen_Qin 2018-08-04 11:00:43
新人求助!
最近学习C语言,遇到scanf和gets函数输入二维字符串数组的问题;
用gets输入;
#include<string.h>
#include<stdio.h>
struct Person{
char name[20];
int count;
}_name[3]={"q",0,"w",0,"e",0};

int main(){
char vote[10][5];
printf("enter your support:\n");
for(int i=0;i<10;i++)
gets(vote[i]);
for(int i=0;i<10;i++)
for(int j=0;j<3;j++)
if(strcmp(vote[i],_name[j].name)==0)
_name[j].count++;

for(int i=0;i<3;i++)
printf("the %s'vote is %d\n",_name[i],_name[i].count);
}


要求输入结果

键盘上输入10个字符串就会出结果。


但是改用printf输入时:键盘需要输入11个,

第二张图卡住了,就是在要多输入一个w,然后按回车才有结果。结果无变化,就是不明白为什么还需要输入第1个。
用的DEV-C。

谢谢。
...全文
779 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_肆 2018-08-08
  • 打赏
  • 举报
回复
不知道你问的什么问题,前面说scanf和gets,scanf会读回车为\n所以你这种输入方法5个就满了,gets不会读回车,可以输10个
后面又问,“但是改用printf输入时:键盘需要输入11个”,printf能输入?还有我想不到需要输11个的情况

最后一句printf,%s 打印_name[i],用字符串打印结构体?不应该是_name[i].name?反正我是程序崩溃了
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
#include<string.h>
#include<stdio.h>
struct Person{
char name[20];
int count;
}_name[3]={"q",0,"w",0,"e",0};

int main(){
char vote[10][5];
int L;
printf("enter your support:\n");
for(int i=0;i<10;i++) {
fgets(vote[i],5,stdin);
L=strlen(vote[i]);
if ('\n'==vote[i][L-1]) vote[i][L-1]=0;
}

for(int i=0;i<10;i++)
for(int j=0;j<3;j++)
if(strcmp(vote[i],_name[j].name)==0)
_name[j].count++;

for(int i=0;i<3;i++)
printf("the %s'vote is %d\n",_name[i],_name[i].count);

return 0;
}
小熊不吃香菜 2018-08-05
  • 打赏
  • 举报
回复
可能是scanf的字符缓冲区的问题,scanf读入了换行符,可以加getchar()解决

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧