新来的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';
如果你想获得一整行,你可以这样做:
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);
我希望这有助于。
'fscanf(in,“%[^ \ n]”,line); ... fscanf(in,“%[\ n]”,line);'以三种方式失败:1)第一个字符是''\ n'',2)输入包含'MAX_LINE_SIZE'个字符。 3)不处理'EOF'。最好使用'fgets()'。 – chux
'垃圾垃圾[2]; fscanf(in,“%[\ n]”,垃圾);'输入失败时''\ n \ n“'。使用'fscanf(in,“%1 [\ n]”,垃圾);'会解决这个问题。 – chux
我必须同意。我有需要时使用这种方式,但最好使用fgets()(对我来说是一个很好的改变)。 事实上,由于参数fgets,从stdin中读取,可能是偶数更好,然后得到一些情况。我已经有了这个需求。 最后:我写的解决方案将在“最后一次扫描”后得到EOF。基本上,它需要休息。 –
使用'while(fgets(line sizeof line,in)!= NULL){...'然后处理'line'。 – chux