2015-02-08 66 views
1

我在C编程语言中遇到了一些问题。这是目前的问题。我必须读取格式如下的文件:将文件读入C中的链接列表中

q 99 
z 8 
q 4 

每行以q或z开头,后跟一个制表符,后跟一个数字。我只想将第q行开始的数字存储在链接列表中。

我能够隔离以q开头的行,但是我的代码将值99分隔为两个单独的节点9和9.我不知道如何解决此问题。

任何建设性的帮助将是伟大的,善良,我是新的C语言!

// Beginning of code reads the file in, and provides structure and 
// function declarations 
struct node *start = NULL; 
char w; 

while((w = fgetc(filep))!= EOF) //filep is pointer to the file 
{ 
    if(w=='z') 
     break; 
    else if(isdigit(w)) 
     push(&start, w); //push function creates the nodes 
} 

// rest of code has function definitions of push and print, creating 
// and printing the linked list 
+0

这是因为你得到*单个字符*。我建议你阅读['fgets'](http://en.cppreference.com/w/c/io/fgets)和['sscanf'](http://en.cppreference.com/w/c/io/fscanf), – 2015-02-08 00:20:02

+0

'char w;' - >>'int w;'...一开始.. – wildplasser 2015-02-08 00:30:23

回答

2

您目前正在逐字阅读文字。 "99"由两个字符组成。

这个特定问题的一个简单解决方法是使用一个函数来解析格式化输入,如scanf()。 这里有一个如何使用它的一个例子:

while (true) { 
    char w; 
    int v; 

    int count = scanf(" %c %d", &w, &v); 
    if (count != 2) 
     break; 

    if (w == 'q') 
     push(&start, v); 
} 

注意格式字符串,我已经包含了领先的空间。这将确保在我们到达%c之前,我们消耗任何领先的空白。这个空格将包括前一行的尾部换行符。

+0

啊,是的,谢谢。我看到你的逻辑!我想知道是否有任何建议用作while循环的条件。因为fgetc导致我误入歧途,所以我很难找出正确的方法。我一直在尝试在EOF中使用不同的条件语句,编译器还没有开心。 – Bret 2015-02-08 00:56:27

+0

我目前正在使用break的内部测试来结束while循环。 – 2015-02-08 00:57:13

+0

嗯,我很抱歉,我似乎没有跟随。真实似乎给编译器一些问题。当我尝试运行while循环时,错误:“未声明的第一次使用此函数”错误出现在此行。你知道可能是什么问题吗?并感谢您耐心帮助新手C程序员。 – Bret 2015-02-08 01:04:46