新来的C,试图更好地理解字符数组,指针,阅读文件等

问题描述:

好的,所以我第一次使用C和Eclipse,来自Eclipse中的初学者级Java编程,我的工作在linux和emacs上,我的新的CS课程实在令人望而生畏。因为我已经知道了很多东西......新来的C,试图更好地理解字符数组,指针,阅读文件等

无论如何,我正在处理的我的任务的当前部分涉及从文件中读取文件(通过将文本文件作为标准进行读取输入到我的程序中)。目前我有三个函数,一个主函数,我在文件中读取/调用其他函数,一个函数用* char beg和* char end作为参数反转单个单词的顺序(apple变成elppa)颠倒一行字中每个单词的顺序,调用前一个函数并将char * str作为参数。

我在阅读我的主要方法中的文件时遇到了困难,因此很容易使用这些功能。这是我目前正在阅读他们的一个片段,但正如您所看到的,我还没有想出一种方法来存储一行文字并将其发送到我的函数中(我需要逐行反转,因此我可以'牛逼只是每一个字符添加到一个多头排列)

enter code here`` 

char line[8192] 
int location = 0; 

FILE *in = stdin; 
int buff = 0; 

while (buff = fgetc(in)) 
{ 
    fprintf(stderr, "Character is: %d '%c' \n", buff, (char)buff); 
    if (buff == EOF) 
    { 
     break; 
    } 

line[location] = (char)buff; 
location++; 

} 
line[location] = '\0'; 
+0

使用'while(fgets(line sizeof line,in)!= NULL){...'然后处理'line'。 – chux

如果你想获得一整行,你可以这样做:

char line[MAX_LINE_SIZE]; 
fscanf(in, "%[^\n]", line); 
//do whatever you need with the line 
fscanf(in, "%[\n]", line); 

第一的fscanf调用读取一整行和商店变量。 但它不会跳过这一行!如果再次使用它,它将存储相同的行。

第二次fscanf调用是为了这个:它在变量中存储'\ n',并跳过您之前读取的行。

如果你愿意,你可以创建一个缓冲区,以获得“\ n”和跳过线:

char garbage[2]; 
fscanf(in, "%[\n]", garbage); 

我希望这有助于。

+2

'fscanf(in,“%[^ \ n]”,line); ... fscanf(in,“%[\ n]”,line);'以三种方式失败:1)第一个字符是''\ n'',2)输入包含'MAX_LINE_SIZE'个字符。 3)不处理'EOF'。最好使用'fgets()'。 – chux

+1

'垃圾垃圾[2]; fscanf(in,“%[\ n]”,垃圾);'输入失败时''\ n \ n“'。使用'fscanf(in,“%1 [\ n]”,垃圾);'会解决这个问题。 – chux

+0

我必须同意。我有需要时使用这种方式,但最好使用fgets()(对我来说是一个很好的改变)。 事实上,由于参数fgets,从stdin中读取,可能是偶数更好,然后得到一些情况。我已经有了这个需求。 最后:我写的解决方案将在“最后一次扫描”后得到EOF。基本上,它需要休息。 –