【发布时间】:2015-09-03 07:45:27
【问题描述】:
这个程序打开一个文件,其中包含一个湖的名称和它的体积,以数百立方英里为单位——用空格分隔。它的输出应该是湖泊的名称,后跟多个星号来表示其体积,精确到一百立方英里(例如,体积为 12.70 立方英里的湖泊将打印 13 个星号)。但是,当它读取包含空格的名称时,它会一直读取到空格,然后在新行中打印下一个字符串。例如,有什么方法可以将“gross dirty lake”读为一行而不是“gross\ndirty\nlake”?到目前为止,这是我所拥有的:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void name_asterisks(char name[20], float vol);
main() {
FILE *fp;
fp = fopen("lakes.txt", "r");
char name[20];
float vol;
if (fp == NULL) {
printf("File does not exist.\n");
system("pause");
return 0;
}
while (fscanf(fp, "%s %f", name, &vol) != EOF) {
name_asterisks(name, vol);
}
fclose(fp);
system("pause");
}
void name_asterisks(char name[20], float vol) {
int i;
printf("%s", name);
for (i = 0; i < (int)roundf(vol); i++)
printf("*");
printf("\n");
}
【问题讨论】:
-
使用
fgets(),然后使用sscanf(buf, " %19[A-Za-z ]%f", name, &vol);。 -
在从你的文件中读取的一行中,湖名是如何与卷号分开的?按空格还是按其他字符?
-
Minor:注意
for (i = 0; i < (int)roundf(vol); ...重复计算roundf(vol)。建议int n = (int) roundf(vol); for (i = 0; i < n; ...