【发布时间】:2016-02-12 23:59:55
【问题描述】:
我的代码如下图:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp = fopen("text.txt", "r");
char c;
int d = 0;
char arr[2000];
do {
c = fgetc(fp);
d = d + 1;
if (c == '\n') {
arr[d] = ' ';
} else
arr[d] = c;
} while (c != EOF);
int z = strlen(arr);
arr[0]= '\0';
for (int i = 0;i < z; i++) {
arr[i] = arr[i +1];
}
fclose(fp);
return 0;
}
代码从文本文件中读取一个字符串并将它们发送到数组 arr[2000](文本文件中有很多单词)。我想问是否有人知道代码通过空格而不是字符分隔的每个单词读取文本文件的方法。
例如,如果我有一个带有字符串的数组 arr:“Jack 是男孩”
arr[0] 将等于“Jack”而不是“J”
p.s(末尾的for循环删除索引0的原因是因为我一直在数组的开头得到一个“(”字符)
任何帮助将不胜感激。
【问题讨论】:
-
您可能需要确保您阅读的字符不是
EOF在使用之前。也许像while ((c = fgetc(fp)) != EOF) { ... }那样做。 -
哦,字符串终止符应该是 last 字符,没有它,
strlen之类的字符串函数将不起作用,您将得到 未定义的行为 i>. -
另外,你存储的第一个字符应该是
arr[0],所以你应该在分配给arr[d]之后而不是之前增加你的索引d。 -
如上所述,您需要将
d = d + 1;移动到您的if测试下方(或者在if测试中使用例如arr[d++] = ' ';)。也无需调用strlen来进行空终止。d已经保存了下一个字符的索引,所以只需arr[d] = 0;。 -
char c;-->int c;
标签: c