【问题标题】:Read from text file only numbers in C仅从文本文件中读取 C 中的数字
【发布时间】:2012-11-10 02:15:24
【问题描述】:

如何从文本文件中仅读取 C 中的数字。除了空格、符号、回车和字母。

这就是我阅读文本的方式:

unsigned char symb, symb1;

FileIn = fopen("InCode.txt","rt"); 
while (!feof(FileIn))
    {
       symb=getc(FileIn);
       symb1=symb;
       printf("%c",symb1);
     }

它应该是这样工作的:

/* Data in the file: */
12hj2 3h23j1

/* Output: */
1223231

【问题讨论】:

  • @omkant“以文本模式阅读”。与以二进制模式读取的“rb”相反。这是 Windows 的事情,AFAIK。
  • @clintp : 哦 thnks 实际上我第一次看到我做了` man fopen `但没有得到他们的也
  • 您能否发布一个示例文本文件,以及您希望看到的输出内容?
  • @Akerlem 根据您的一些后续 cmets,我不得不问 - 您是否希望程序根本不读取非数字字符(即只是以某种方式跳过它们,即使直到它读取它才能知道它不是数字)?除非您事先知道您想阅读哪些字符,否则无法做到这一点......发布的答案显示了如何阅读每个字符,但只对您想要的字符做一些事情,这是您可以做到的最好的做...
  • 是的,你是对的。程序必须只读从 0 到 9,仅此而已。

标签: c text numbers


【解决方案1】:

试试这个:

        char symb ;
        unsigned char symb1;
        FILE *FileIn;
        FileIn = fopen("InCode.txt","rt"); // Haven't checked fopen failure
        while ((symb=getc(FileIn))!=EOF)
            {
               symb1= (unsigned char) symb;  
               if(symb1 >= '0' && symb1 <='9')
                 printf("%c",symb1);
             }

如果symb09 之间,则打印它。并丢弃您提到的所有其他字符 space, newline, alphabats (lower & upper) ,任何其他符号。

【讨论】:

  • 试试“r”而不是“rt”然后看看。
  • 尝试int symb;而不是unsigned char,否则将无法检测到EOF。
  • @Akerlem : 你用的是哪个编译器?
  • @wildplasser :谢谢你提到它,我怎么忘记了
  • 在我的程序中,我必须使用 unsigned char 类型。那是因为我有这个问题。我正在使用视觉工作室
【解决方案2】:

或者你可以使用ctype.h库中的isdigit

while ( ( symb = getc( FileIn ) ) != EOF ) {
    if( isdigit( symb ) != 0 )
        printf("% c",symb);
}

【讨论】:

  • 我试过 isdigit。但同样的事情。不知道为什么,但不起作用。
  • 我测试了这个小脚本,它确实有效,是什么问题,你能更具体吗?@Akerlem
  • 我使用的是unsigned char,而不是int
  • @Akerlem 几分钟前我做了一点修改?也许它太小了以至于你没有注意到。
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
相关资源
最近更新 更多