我知道这应该是一个容易实现的功能。我需要解析.txt文件并将其放入2D数组中。为了初始化2D数组,我需要知道最长行中的行数和字符数。我相信我有一个功能可以给我一些行数。我似乎无法使用我的函数来找到最长行的长度。
到目前为止,这是我的代码。我知道这是错误的(因为它不起作用)。
int getrow(FILE *mapfile)
{
int chars =0 ;
int longest = 0;
int Hlen;
char *line;
char *buf;
line = malloc(1000); //1000 is set to be max chars in line
line = fgets(line, 1000, mapfile); //get first line of file
while(line)
{
chars = 0;
buf = strtok(line, " ");
while(buf)
{
chars++;
buf = strtok(NULL, " ");
}
(chars > longest)?(longest = chars):(longest==longest); //If the number of characters scanned is longer than previous long, save new longest line
line = fgets(line, 1000, mapfile);
}
Hlen = longest;
free(line);
return Hlen;
}
我正在解析的文件是:
###################
# # F####################################
# # E# #
# ##### ################################## #
# # # #
############################ ################# # #
# # # #
# ################## # # #
# ##### # # #
# ############### # # # #
# # # # # #
################### ########################## # #
#L # # #
# # # ######################## #
# # # #
############ # # ##########################
# # # #
# ####### #
# # # #
# # # #
# # # S#
#########################
答案 0 :(得分:1)
正如Lashane所指出的,您可以使用strlen
来获取数字
行中的字符。
删除该三元语句。您需要做的就是检查chars
是否大于longest
,如果是,请更新longest
。
无需Hlen
变量。只需返回longest
奖励:还没有必要分配内存。想想看,你实际上并不需要保存该行的副本,只需要遍历文件的每个字符并计算换行符之间的字符。您可以使用fgetc进行此操作。