2011-04-26 37 views
1

我正在读取整数文件。我想将每行的整数保存到一个新的数组中。为此,我想检测一个文件的新行。如果有人知道这一点,请帮助。如何使用C程序检测任何文件的新行

要读取的文件如下

1 2 4 5 6 
7 3 2 5 
8 3 
9 7 6 2 
+0

那么,你到目前为止有什么?你知道如何打开一个文件并从中读取吗?你知道如何一次读一行吗? – 2011-04-26 13:35:24

+1

['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)从输入流中读取**行**。使用它和['sscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/scanf.html)。 – pmg 2011-04-26 13:36:53

回答

2
#include <stdio.h> 
int main (int argc, char **argv) { 
    FILE *fp = fopen ("d:\\abc.txt", "r"); 
    char line[1024]; 
    char ch = getc (fp); 
    int index = 0; 
    while (ch != EOF) { 
     if (ch != '\n'){ 
      line[index++] = ch; 
     }else { 
      line[index] = '\0'; 
      index = 0; 

      printf ("%s\n", line); 
     } 
     ch = getc (fp); 
    } 


    fclose (fp); 

    return 0; 
} 
+0

在这个程序中有一些分段错误...我试图找出原因.... – 2011-04-26 13:53:08

+0

我没有得到任何分段错误,请注意线限于1024.这是示例代码,您可以扩展它进一步。 – Avinash 2011-04-26 13:55:42

+0

我有一行少于4或5个整数... – 2011-04-26 14:00:21

8

为什么不使用fgets()在了文件中的时间去一条线?然后您可以使用sscanf()而不是fscanf()来提取整数。

+0

这是一个很好的建议,因为它将系统调用的数量减少到每行只有一行,而不是每个字符一个。非常适合演出! – oysteijo 2014-08-02 09:56:01

-1

如果使用由字符阅读炭然后识别空白与“32”和“输入”由“13”和/或“10”

+0

从不硬编码ASCII值。使用字符常量,例如''代表空格,'\ n'代表换行,'\ r'代表回车。当你想要的时候也使用isspace()。 – unwind 2011-04-26 14:03:55

0

使用fgets()在读取输入的单个线时间。然后使用strtol()解析一个整数,使用它的“结束指针”功能找出再次尝试的位置,然后循环直到解析完所有的值。

0

使用getc()这个动作很好,但不要忘记,getc()返回类型是int。重新输入为字符“有效”,但由于在重新输入为char(在大多数C编译器上)后EOF = -1 = 0xFF(即0xFF字符被检测为EOF),您可能会遇到非严格ASCII输入文件的问题。

0
#include<stdio.h> 
void main() 
{ 
    FILE *p; 
    int n; 
    int s=0; 
    int a[10]; 
    p=fopen("C:\\numb.txt","r"); 
    if(p!=NULL) 
     printf("file opened"); 

    while((n=getc(p))!=EOF) 
    { if(n!=NULL && n!='\n') 
     { 
     printf("\n%d",n); 
     a[s]=n; 
     ++s; 
     } 
    } 
fclose(p); 
getchar(); 
} 

我不确定int为char,反之亦然转换,但程序适用于非零数字。我尝试了视觉基础。

相关问题