我必须写下包含超过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);
}
}