为什么不保存我的变量?我一直在测试此代码,但我的变量未保存到结构数组中

时间:2018-12-02 20:17:17

标签: c arrays struct

这是我的代码和变量的输出: 我还需要在while循环中添加什么,以便可以使用变量和方法。

#!/bin/bash
for f in *.txt; do
    size_f=$(wc -l < "$f")
    for f2 in *.txt; do
        size_f2=$(wc -l < "$f2")

        if (( size_f > size_f2 )) ; then
            echo "$f" bigger than "$f2"
        elif (( size_f == size_f2 )) ; then
            echo "$f" same size as "$f2"
        else
            echo "$f" smaller than "$f2"
        fi
    done
done

这是带有不需要的字符串的文件,这就是为什么我使用fgets的原因。

int main() {
  FILE *ifp;
  ifp = fopen("processes.txt","r");
  if(ifp == NULL) {
      printf("Error Opening file.\n");
      exit(1);
  }

  char str[100];
  int i=0;

  while(fgets(str, 100, ifp) != NULL) {
    fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);
    i++;
  }
}
printf("ProceId AT   duration rank\n");

for (int j = 0; j < i - 1; ++j){
    printf("%d\t%0.1f\t%d\t%d\n",arr[j].pid,arr[j].AT,arr[j].duration,arr[j].rank );
}


ProceId AT   duration rank
1398    0.0     0       0
2306    0.0     0       0
3219    0.0     0       0
4478    0.0     0       0
5653    0.0     0       0
6399    0.0     0       0
7777    0.0     0       0

1 个答案:

答案 0 :(得分:0)

更改此:

fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);

对此:

fscanf(ifp," %d %f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].rank);

因为您使用的是无效的转化说明符。

下次要注意编译器警告,它们通常会讲述整个故事:

warning: invalid conversion specifier '.'
      [-Wformat-invalid-specifier]
        fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].d...
                       ~~~^
warning: format specifies type 'int *' but the argument has type
      'float *' [-Wformat]
        fscanf(ifp," %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].d...
                              ~~                   ^~~~~~~~~~
                              %f
warning: data argument not used by format string
      [-Wformat-extra-args]
  ..." %d %0.1f %d %d", &arr[i].pid, &arr[i].AT, &arr[i].duration, &arr[i].ra...
     ~~~~~~~~~~~~~~~~~                                             ^

警告提示由于转换说明符无效,%d格式说明符用于结构体的浮点字段(名为AT),然后一切都变得一团糟,因为您一种格式说明符...

How to only accept a certain precision (so many decimals places) in scanf?中阅读更多内容

相关问题