从文件C编程中读取

时间:2013-12-13 14:17:03

标签: c unix

我很感激我能得到任何帮助。我不确定我完全理解这个程序。我尝试运行它时也遇到以下错误。 我还被告知在第15行我试图修改一个char数组。我该怎么办?谢谢你看看。

structFinal.c: In function print_part':
structFinal.c:14: error: invalid operands to binary %
structFinal.c: In function main':
structFinal.c:36: error: syntax error before ']' token


#include <stdio.h>
#define NAME_LEN 25

typedef struct {
    int number;
    char name[NAME_LEN+1];
    int on_hand;
} part;

void print_part(part p[], int ind) {
    int i;
    printf("Whole List\n");
    for(i = 0; i< ind; i++)
    {
        if(p[ind].name % 2 == 0)
          printf("Part number: %d\n", p[ind].number);
        printf("Part name: %s\n", p[ind].name);
        if(p[ind].on_hand < 5)
           printf("Quantity on hand: %d\n", p[ind].on_hand);
    }

printf("%d\n", p[ind].number);
fgets(p[ind].name,50,fp);
fscanf(fp, "%d", &p[ind].on_hand);
printf("%s\n----%d\n", p[ind].name, p[ind].on_hand);
ind++;
fscanf(fp, "%d", &p[ind].number);
 a = fgetc(fp);
} print_part(p[ ] , ind);
fclose(fp);
return 0;

编辑:我刚刚在Netbeans的Ubuntu计算机上试过这个并运行了。我们假设在 Unix 中运行它,那就是它失败了。我输了。

编辑:到目前为止,这是我的最终文件。我很确定这有效。

#include <stdio.h>
#define NAME_LEN 25

typedef struct {
    int number;
    char name[NAME_LEN+1];
    int on_hand;
} part;

void print_part(part p[], int ind) {
int i;
printf("Whole List\n");
for(i = 0; i< ind; i++)
{
printf("Part number: %d\n", p[i].number);
printf("Part name: %s\n", p[i].name);
printf("Quantity on hand: %d\n", p[i].on_hand);
 }
 }

int main() {
/* first try, input only one set and print it */
part p[50];
int ind=0;
FILE *fp;
fp = fopen("structTest.txt", "r");

fscanf(fp, "%d", &p[ind].number);

char a;
a = fgetc(fp); /* extract the return symbol out of input buffer */
while (p[ind].number != 0)
{
     while (a != '\n')
     {
             a = fgetc(fp);
    }

    printf("%d\n", p[ind].number);
    fgets(p[ind].name,50,fp);
    fscanf(fp, "%d", &p[ind].on_hand);
    printf("%s\n----%d\n", p[ind].name, p[ind].on_hand);
    ind++;
    fscanf(fp, "%d", &p[ind].number);
     a = fgetc(fp);
}
print_part(p , ind);
fclose(fp);
 return 0;
}

/ *    代码是固定的,因此它将在部件号后面的所有空格中取出    输入。 getchar while循环将保持一个字符到var a    直到达到返回键 * /

2 个答案:

答案 0 :(得分:1)

这里你最后有一些角色。注意到`哪个不属于那里?

if(p[ind].name % 2 == 0)`

这个

print_part(p[ ] , ind);

应该是

print_part(p , ind);

答案 1 :(得分:1)

p [ind] .name是一个字符数组,你不能对它运行modulu操作。

您可以在数字上运行% - 整数。

在字符串上执行模块的逻辑意义是什么? (字符数组)

假设你有abcde的数组内容是什么是abcde%2?