无法计算 C 语言中文本文件最后一行最后一个单词中的数字



我必须写下包含超过2位数字的单词的数量。所有的都没问题,直到最后一行中不能计数的最后一个单词。我数不清最后一个单词的数字。下面是代码:

while(fgets(row,MAX,fp) != NULL)
{
    int flag = 0; 
    int digits = 0;
    int words = 0;
    for(i = 0; i < strlen(row); i++)
    {
        if(isalpha(row[i]))
        {
            if(!flag)
            {
                flag = 1;
            }
            if(isdigit(row[i]))
            {
                digits++;
            }
        }
        else if(flag)
        {
            flag = 0;
            if(digits > 2)
            {
                words++; //words containing more than 2 digits
            }
            digits = 0;
        }
        printf("%dn%s",words,row);
    }
}

我认为在文件末尾没有非字母字符,所以ELSE块不运行,在文件末尾放置一个非字母字符,如点。

在此条件下-

    if(isalpha(row[i])) // I think yo should use "isalnum(row[i])"
    {
        if(!flag)
        {
            flag = 1;
        }
        if(isdigit(row[i]))
        {
            digits++;
        }
    }

因为如果一个字符不是字母(考虑它是数字),它不会进入其中。那么它如何增加digits ?用isalnum(row[i])代替isalpha(row[i])

然后我认为剩下的代码工作得很好!

尝试以下更改-

    if(isalnum(row[i])) 
    {
        if(!flag)
        {
            flag = 1;
        }
        if(isdigit(row[i]))
        {
            digits++;
        }
    }

供参考-

#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define MAX 100
int main()
{
        FILE *fp;
        char row[MAX];
        int i;
        fp=fopen("FileXYZ","r"); // where FileXYZ is the file name
        int words = 0;
        while(fgets(row,MAX,fp) != NULL)
        {
                int flag = 0 ;
                int digits = 0;
                for(i = 0; i < strlen(row); i++)
                {
                        if(isalnum(row[i]))
                        {
                                if(!flag)
                                {
                                        flag = 1;
                                }
                                if(isdigit(row[i]))
                                {
                                        digits++;
                                }
                        }
                        else if(flag)
                        {
                                flag = 0;
                                if(digits > 2)
                                {
                                        words++; //words containing more than 2 digits
                                        printf("%dn%s",words,row);
                                }
                                digits = 0;
                        }
                }
        }
        return 0;
}

文件内容为-

a3b4cd
ab4c4d5
abcd
2ab3cd
abcd
i6k7k8
h0g9j
ywer4t

输出——

root@sathish1:~/My Docs/Programs# ./a.out 
1
ab4c4d5 
2
i6k7k8

fscanf读取文件。下面是一个简单的例子。

main ()
{
    char row [ 100];
    FILE *fp = fopen ("/vol/users/test/sample.txt", "r");
    while(fscanf(fp, "%s", row) ==1)
    {
       printf("%sn",row);
    }
}

相关内容

  • 没有找到相关文章

最新更新