- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须编写一个程序,在整数的三角形迷宫中找到最大值的路径。
fscanf
有疑问功能。由于某种原因它不读。我将非常感谢任何帮助或建议,因为该项目将尽快到期。
30
47 1
35 65 21
0 74 94 58
71 29 34 28 60
97 6 29 19 26 68
37 1 48 98 57 89 64
60 38 33 23 49 57 19 50
4 83 52 47 84 60 16 56 90
19 59 6 10 97 47 96 93 59 50
/#include <stdio.h>
/#include <stdlib.h>
/#define MAX 100
void read (int maze [][MAX]);
int findPath (int maze[][MAX], int map[][MAX], int size);
void print (int map [][MAX]);
int main()
{
int maze [][MAX] = {};
int map [][MAX] = {};
int sum = 0;
int size = MAX;
read (maze);
findPath (maze, map,size);
print (map);
return;
}
void read (int maze[][MAX])
{
FILE * mazeFile;
int num, r, c, count;
if ((mazeFile = fopen ("t4.txt", "r")) == NULL)
{
printf ("Error opening a file\n");
}
else
{
while (mazeFile != EOF)
{
fscanf (mazeFile, "%d", &maze[r][c]);
for (r = 0; r < 100 ; r++)
{
count = r + 1;
for (c = 0; c <= count; c++)
{
printf ("(%d, %d) = %d\n",r, c, maze[r][c]);
}
}
fclose (mazeFile);
return;
}
}
}
int findPath (int maze[][MAX], int map[][MAX], int size)
{
int sum [MAX][MAX] = {0};
int row, col, maxNum;
for(row=(size-1); row >= 1; --row)
{
for (col-row;col>=1;--col)
{
maxNum = (sum[row+1][col] > sum [row+1][col+1] ? col : col + 1);
sum[row][col]= maze[row][col] + sum [row+1][maxNum];
map[row][col] = maxNum;
}
}
return sum [0][0];
}
void print (int map [][MAX])
{
printf ("(%d, %d) = ", map[0][0], map[0][1]);
return;
}
最佳答案
嗯 :-) 有很多问题,但你问的是读取文件,所以我现在只解决这个问题:
一些更正
read
, write
,因为它们是标准库函数,你会遇到很多问题; #include <stdio.h>
/**
* @function: read_maze
* @desc: Reads a maze file and dumps it to stdout,
* @return: Returns 0 on success, -1 on failure
*
*/
int read_maze(const char *filename)
{
FILE *fp;
int entry;
fp = fopen(filename, "r");
if ( !fp ) {
perror(filename); /* prints system error related to
* the problem reading mazefile
*/
return -1;
}
while(!feof(fp)) {
if (fscanf(fp, "%d", &entry) == 1) {
printf ("%d\n", entry);
}
}
return 0;
}
int main()
{
if(read_maze("t4.txt")) {
return -1;
}
return 0;
}
第2步:
int row0[1];
int row1[2];
int row2[3];
.
.
.
int row99[100];
这有点丑陋,而且不是真正的程序化;自动执行此操作会很好;
#define MAXROWS 100
int *row[MAXROWS];
注意:从概念上讲,MAXROWS 实际上对应于我们在
row
前面插入的硬编码 0-99。而不是括号中数组大小的声明部分。所以对于
int row55[56];
这是关于宣布55; 56 声明稍后将来自 malloc;
/* starting from beginning */
#define MAXROWS 100
int *rows[MAXROWS];
int init_triangular_array()
{
int k;
memset(rows, 0, sizeof(int *)*MAXROWS); /* make the rows array all zeros */
for (k = 0; k < MAXROWS; k++) {
rows[k] = (int *)calloc(k+1, sizeof(int)); /* cardinality */
if( rows[k] == NULL ) {
fprintf(stderr, "Unable to allocate memory, quoting\n");
exit(-1); /* just kill the program */
}
}
}
现在我们有了一个初始化数组的函数……让我们也创建一个函数来在完成后释放数组;因为这只是很好的编码实践。
void free_triangular_array()
{
int k;
for (k = 0; k < MAXROWS; k++ ) {
if ( rows[k] )
free(rows[k]);
}
}
现在让我们编写一个函数来从我们的文件中填充它:
int fill_triangular_array(const char *filename)
{
FILE *fp = fopen(...);
int row = 0, col = 0;
while(!feof(fp)) {
for (col = 0; col <= row_number; col++ ) {
// read an entry as above
rows[row][col] = entry;
}
}
}
您可以填写缺失的位。
int main()
{
init_triangular_array();
fill_triangular_array();
/* do something with the array */
free_triangular_array();
}
关于c - 为什么我的 fscanf 不读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16476203/
我正在用 C 编写一个函数,它应该从文件中输入有关学生及其成绩的信息。但是,有时在运行程序时,即使输出符合预期,测试也会在 fscanf 处显示分析器错误。 /*structure for grade
如何在 fscanf() 中跳过一个值并转到下一个值?例如,我的输入文件中有以下数据: 11112222 3.95 4 22.5 我应该怎么做才能扫描第二个值? (我想跳过11112222扫描3.95
我正在使用这个 for 循环从纬度和经度坐标文件中引入数据,然后将坐标转换为十进制度数,将度数转换为弧度,然后计算分离角度,并返回两个城市之间的距离。我需要比较文件的前两行,计算距离,打印结果,然后再
我在 while(fscanf != EOF) 循环中执行了一些代码。但是,即使 fscanf 已完成执行,我也需要继续运行该代码,直到满足某些条件。我的意思是我想我可以将代码复制/粘贴到 while
我对 C 语言的文件处理非常陌生,我想问几个问题! 我经常使用 fscanf/fget 将文件转换为不同的格式。不过我不太清楚 fscanf 和 fgets 之间的区别。 特别是,我不确定 fscan
我是 C 的新手,这里有这个简单的代码: int main(int argc, char **argv){ FILE *input = stdin; char string[20];
我已经有了一些使用 fscanf() 读取文本文件的代码,现在我需要修改它,以便以前无空格的字段需要允许空格。文本文件基本上是这样的形式: title: DATA title: DATA etc...
我目前正在开发一个简单的 C 应用程序。它采用单个文件作为命令行参数,其格式如下: 1,2,3 4,5,6 7,8,9 etc. 但是,无论出于何种原因,fscanf 都不会扫描数字!这是一个例子:
我正在尝试读取逗号分隔值格式的文件,程序读取了前两种数据类型,但无法读取最后一种。请帮我一些忙 这是我正在尝试读取的文件中的内容: Jane,50,400.60 代码如下: FILE* fpt
我试图让我的程序从文件中读取输入,但不跳过 fscanf 通常执行的空行。扫描文件的文件和循环是: inFile = fopen("text.txt", "r"); for(i = 0; fsca
我正在尝试从 C 文件中读取数据,该文件将始终以以下类型的行进行格式化: 16 Oct 2013 00:01:00.000,0.000,0.000000 这是一个字符串、一个逗号、一个浮点数、一个逗号
如何格式化 fscanf 来格式化输入{'name surname', 'username', 指向不包含撇号的字符串 fscanf(fp,"{%s %s %d}",name,username,use
我正在尝试使用 fscanf 将文件中的行读取到指向字符数组的指针中。我在打印时遇到段错误。我究竟做错了什么?我应该使用 fscanf 以外的函数吗? #include #include #inc
我有一个制表符分隔文件,我正在尝试将其转换为制表符分隔文件。我正在使用 C。我在尝试读取文件的第二行时遇到了困难。现在我只有数万行重复第一行。 #include #include #define
我正在尝试使用 c 读取一个文件,其中每个变量都由竖线字符分隔。我尝试了以下 fscanf(fp, "%s[|], %s[|], \n", str1, str2); 括号之间的字符是垂直线:竖线字符。
我真的卡在某事上了。 我有一个文本文件,其中有 1 个单词后跟 ~100 个 float 。 float 由空格、制表符或换行符分隔。这种格式在整个文本文件中重复多次。 例如,这是文本文件的样子: o
我想使用 fscanf (使用 gcc 的 C 代码)从文件中解析 ip。所以,我想做: char myip[INET_ADDRSTRLEN]; fscanf(file, "%16s", myip);
while 循环不起作用,我不明白为什么。它没有给我任何错误,但它没有读取任何输入内容。文件内容为: 4 $11$ pelle $2$ pollo $333$ palla $41$ alla 我的代码
我有一些代码,我试图从文件中读取一个集团实例。实例文件中的第一行和第二行分别表示顶点和边的数量。但是我的代码似乎没有正确阅读。这是我的代码中与问题相关的部分: int num_edges=0; int
我正在尝试使用 fscanf 解析一个文本 (CSS) 文件并提取所有匹配此模式的语句: @import "some/file/somewhere.css"; 为此,我设置了以下循环: FILE *f
我是一名优秀的程序员,十分优秀!