如何仅使用C从包含数字和字母的数组中读取数字?

时间:2012-03-28 06:01:03

标签: c arrays file text int

我是新来的。 我有一个文本文件:

6
<cr>
R 0
R 1
R 4
R 36
R 0
R 4

/ edited / 这就是我所拥有的。我想将每一行读入一个数组,以便我可以将该数组转换为一个整数,这样我就可以打印出我想要的任何一行的数字。

    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>


    int main()
    {
        FILE *fr;   /*declares file pointer*/
        int i, j, num[32];
        char input_file[32], line[32];

        fr = fopen(input_file, "r");
        if(fr != NULL){

            while(fgets(line, sizeof(line), fr) != NULL){
                for(i=0;i<strlen(line);i++){
                    if(line[i] >= '0' && line[i] <= '9'){
                        num[i] = line[i] - '0';
                    }
                i++;
                                printf("%d\n", num[i]);
            }
            fclose(fr);
        }
        else{
            perror(input_file);
        }
    }

我没有收到任何错误,但它没有打印正确的东西;这就是它打印的内容:

-370086
-370086
-370086
-370086
-370086
-370086
-370086
-370086

1 个答案:

答案 0 :(得分:3)

您可以在字符周围使用单引号来获取它的实际字节值,因此您可以使用它来检查字符是否在您想要的范围内。

您不想使用strcpy,而是希望一次一行地浏览行中的字符,接受您想要的字符,如下所示:

for(i = 0; i < strlen(line); i++)
{
    if(line[i] >= '0' && line[i] <= '9')
    {
        // this is a good character, add it to the array in the appropriate place
    }
}

一旦你认为'0'是十进制值48和look at the table here,你应该能够解决整数。

注意,这看起来有点像家庭作业,因此我的答案并没有给你所需要的一切 - 希望它能为你提供你需要的东西!祝你好运。