这是我的代码和变量的输出: 我还需要在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
答案 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?中阅读更多内容