【问题标题】:C fscanf read character or integerC fscanf 读取字符或整数
【发布时间】:2012-11-06 11:52:08
【问题描述】:

我需要使用 fscanf 从文本文件中读取字符和整数,但我不知道下一个值是字符还是整数。我该怎么做类似的事情

if(next_is_character)
    fscanf(file, "%c", &mycharacter);
else
    fscanf(file, "%d", &myinteger);

【问题讨论】:

  • 为什么在 fprintf() 中使用 & ?
  • 给定代码的问题不清楚
  • 可以读取为字符串,然后判断是单个字符还是数字。或者读取单个字符,如果是数字,则将其余字符读取为数字。
  • but I don't know whether the next value is going to be a character or an integer 那么你使用了错误的工具,因为fscanf 读取的是已知格式。

标签: c


【解决方案1】:

将所有内容读取为 c-string 并使用 strtol 进行验证。

如果strtol 未能将字符串转换为整数,那么它就是字符。否则为整数。

char *endptr;

fscanf(fp, "%s", str);

myInteger = strtol(str, &endptr, 10);

// Check the errno for errors

【讨论】:

  • 我认为这很混乱,因为在正常操作时会引发错误情况,但在这种情况下,可能是可以接受的。我会使用fgets
【解决方案2】:
while(fscanf(fp,"%c",&charvar))
{
    if(isalpha(charvar))
     {
        //it is character
      }
     if(isdigit(charvar))
     {
        //it is integer
      }
}

你可以使用这个功能

#include <ctype.h>

int isalnum(int c);
int isalpha(int c);
int isascii(int c);
int isblank(int c);
int iscntrl(int c);
int isdigit(int c);
int isgraph(int c);
int islower(int c);
int isprint(int c);
int ispunct(int c);
int isspace(int c);
int isupper(int c);
int isxdigit(int c);

【讨论】:

    【解决方案3】:

    我一直在搞乱,我发现这样的东西可以工作:

    fpos_t position;
    fgetpos (fp, &position);
    
    char isCharacter;
    fscanf(fp, "%c", &isCharacter);
    if(isalpha(isCharacter))
    {
            //it is character
    }
    else
    {
        fsetpos(fp, &position);
        // integer, read it
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2012-07-17
      • 2014-03-13
      • 1970-01-01
      • 2014-02-03
      • 2021-07-15
      相关资源
      最近更新 更多