【问题标题】:How to take string input simultaneously?如何同时进行字符串输入?
【发布时间】:2016-07-13 10:45:11
【问题描述】:

我正在做一个数据库基础项目 考虑一个结构

struct student
{ 
int rollno;
char full_name[20];
char address[50];
char birthmark[50];
};

如何接受这个输入

第 6 卷

叫约翰·斯诺

地址北临冬城

胎记剑伤全身

我尝试过的:

我试过了

scanf("%s",stringname),scanf("%[^\n]s",stringname),gets(stringname), fgets(buffer,size,stdin)fflush(stdin)。 总是有一些错误。 到目前为止 fgets 工作得很好,但我读过ffush(stdin) 是错误的做法。

那么,一个接一个地同时输入字符串(带空格)的方法应该是什么。

【问题讨论】:

  • 欢迎来到 Stack Overflow!你介意创建一个MCVE吗?
  • scanf("%d", &studentVar.rollno);scanf("%*[^\n]");scanf("%*c");scanf("%19[^\n]%*c", studentVar.full_name);scanf("%49[^\n]%*c", studentVar.address);scanf("%49[^\n]%*c", studentVar.birthmark);
  • @BLUEPIXY 非常感谢 :) 帮助

标签: c input scanf stdin fgets


【解决方案1】:

最好的方法是,从fgets() 的输入中读取整行,然后在填充结构成员之前解析和验证。流程图可以是这样的

fgets(into the buffer) and the return is not NULL
if (integer)
store into rollno;
else 
copy the input string into corresponding member variable.

是的,fflush(stdin) 调用 undefined behaviordon't use that


没有错误代码和mcve,这就是我们能做的所有帮助

【讨论】:

  • 谢谢,但是当 fgets 后跟 scanf() 时会出现一些错误,在这种情况下该怎么办。例如 scanf("%s",var);fgets(par1,par2,par3);在这种情况下,fgets 会吃掉 scanf 留下的新行。我应该刷新它吗?
  • @ekaf 为什么不一直使用fgets()? (对不起,我个人不是scanf()family的粉丝
  • 好吧,从现在开始,在处理字符串时只使用单词 fgets :) 感谢您的帮助
  • 如果所有学习者都是从 fgets() 开始的,而不是从 scanf() 开始“学习”的,那么想想 SO 帖子会越来越少。 @ekaf 还评论stackoverflow.com/q/2693776/2410359
猜你喜欢
  • 2012-02-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多