70,020
社区成员




while (1)
{
if (fgets(buf, LINE_SIZE, fp) == NULL) /* 从文件里读取一行文本到buf */
break; /* 如果fgets返回NULL,说明文件结束,跳出循环 */
this_line_is_data = 1;
for (i = 0; buf[i]; i++) /* 对刚读进来的文本逐个字符进行判断 */
{
if (!isdigit(buf[i]) && !isspace(buf[i]))
{ /* 如果本行有任何一个字符既不是数字也不是空白字符,就认为本行不是有效数据 */
this_line_is_data = 0;
break;
}
}
if (!this_line_is_data)
continue; /* 不是有效数据,对本行文本不做处理,继续读下一行 */
/* 现在buf里的内容是" 0 30 8 1 18 23 9 19 26 2 " */
ptr = buf; /* ptr指向本行开头 */
while (1)
{ /* 从一行文本里逐个读出整数,每次循环读取一个 */
while (isspace(*ptr))
ptr++; /* 移动ptr,跳过空格,到下一个数字 */
if (sscanf(ptr, "%d", data+total) <= 0) /* 从ptr指向的内存读出一个整数 */
break; /* 如果sscanf返回0,说明本行结束,跳出循环 */
total++;
while (isdigit(*ptr))
ptr++; /* 移动ptr,跳过刚读取的数字,到下一个空格 */
}
}
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LINE_SIZE 256
#define DATA_SIZE 1024
#define FILENAME "sequence.txt"
int main()
{
int i;
int total = 0;
int this_line_is_data;
char buf[LINE_SIZE];
int data[DATA_SIZE];
FILE *fp = NULL;
char *ptr = NULL;
fp = fopen(FILENAME, "r");
if (fp == NULL)
{
printf("Failed to open file %s\n", FILENAME);
return 1;
}
while (1)
{
if (fgets(buf, LINE_SIZE, fp) == NULL)
break;
this_line_is_data = 1;
for (i = 0; buf[i]; i++)
{
if (!isdigit(buf[i]) && !isspace(buf[i]))
{
this_line_is_data = 0;
break;
}
}
if (!this_line_is_data)
continue;
ptr = buf;
while (1)
{
while (isspace(*ptr))
ptr++;
if (sscanf(ptr, "%d", data+total) <= 0)
break;
total++;
while (isdigit(*ptr))
ptr++;
}
}
printf("%d intergers read.\n", total);
for (i = 0; i < total; i++)
printf("%d ", data[i]);
printf("\n");
}