我想在文本文件中读取并将字符存储在数组中。但是存储的字符都必须较低,并保持字数的运行计数。我们可以假设我们不会再使用测试中的前5000个单词,也不会超过单个单词中的前15个单词。我如何修复使每个角色成小写。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *inFile;
char userInputFileName[100];
char *line = malloc(sizeof(char)*100);
int count = 0;
char *token;
char delim[] = " ,.!;:\n";
char *eachWord;
printf("Please enter the name of the text file \n");
scanf("%s", &userInputFileName);
inFile = fopen(userInputFileName, "r");
if(inFile == NULL)
{
fprintf(stderr, "Failed to open file \n");
exit(1);
}
while(fgets(line, sizeof(line),inFile)
{
printf("%s\n", line);
char newWord[5000];
while((eachWord = strtok(token, delim)) != NULL)
{
strcpy(newWord[count], eachWord);
}
count++;
}
}
答案 0 :(得分:2)
您的while
循环有一些思考错误。我会向您概述它们,但不会修复它们,以便您可以修复它们并进行学习。
你写while(fgets(line, sizeof(line),...
但是只读4或8个字符。为什么?阅读sizeof
,然后查看您要问的大小。
在while循环中,您说char newWord[5000]
。这意味着您要分配一个5000个字符的数组。但是在您的问题陈述中,您说&#34; ...测试中的5000个单词,并且不超过前15个字符&#34;。所以有一个思想错误,你需要一个5000个单词的数组 15个字符。
但是,您在循环中声明此数组,这意味着它将在while循环的底部被销毁并在顶部重新创建。所以你松开了只读和存储的单词。您应该将数组分配到不会被销毁的位置,并在每次迭代时重新创建。
在tyour strcpy
中,您无法确保仅复制前15个字符(根据您的问题陈述)。使用正确的复制功能来做到这一点。并且不要忘记终止复制的字符。
然后在while strtok...
之后增加计数。这似乎不是计算单词数量的正确位置。
回到绘图板......