【问题标题】:question about reading an input using fgets and scanf in c [duplicate]关于在c中使用fgets和scanf读取输入的问题[重复]
【发布时间】:2020-01-15 01:28:09
【问题描述】:

我最近一直在尝试用 c 做一个练习。

我想读取类似于“SET 0”的输入(请注意,稍后会解析实际文本)。

我试过 fgets 是这样的:

char in[20];
//ok, this reads the first line, the first input is meant to be a number
scanf("%s",in);

if(isdigit(in[0])){

    char array[]={'?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?'};

    auto counter = atoi(in);

    while(counter !=0){

        fgets(in, sizeof(in),stdin);

由于某种原因,当我输入例如“SET 0”并且我正在使用 fgets 时,in 变量为空(不会打印任何内容)。

我试过 scanf 但它不会读取数字。

关于我能做什么的任何想法/建议?

提前致谢!

【问题讨论】:

  • auto counter = atoi(in); 它在这里的工作方式很有趣,但我相信auto 并不意味着你认为它的作用。 what i can do?你想做什么?结果应该是什么?我不明白,你究竟尝试了什么?使用fgets 后如何检查in 变量是否为空?您是如何使用fgets 的?你检查fgets返回值了吗?
  • 如果输入是'SET 0',那么scanf会将in设置为字符串“SET”。所以isdigit(in[0]) 是假的。
  • Konstantinosm 你在用C++ compiler吗?
  • 永远不要scanf("%s", ...)。它是不安全的,并且可能不会像您期望的那样做。

标签: c scanf fgets


【解决方案1】:

在你知道为什么 scanf() 是邪恶的之前,不要将 fgets()scanf() 混用。

fgets() 读取scanf() 未读取的第一行用户输入的左侧'\n'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 2014-02-23
    • 2018-08-04
    • 2018-08-31
    相关资源
    最近更新 更多