分配:
A - 编写一个程序,从用户那里获取数字,直到用户输入“-1”。然后程序应该将数字写入文件。
我已经这样做了,但我不能做B:
B - 更新程序并将直方图打印到文件中,如下所示。将代码保存在新文件中。
实施例
report.dat:
5 *****
8 ********
11 ***********
3 ***
A代码:
#include <stdio.h>
int main() {
int num;
const int senitel = -1;
FILE*fileId;
printf("Please enter integer number (-1 to finish)");
scanf("%d", &num);
fileId = fopen("report.dat", "w");
while (num != senitel) {
fprintf(fileId, "%d \n", num);
scanf("%d", &num);
}
fclose(fileId);
return 0;
}
答案 0 :(得分:1)
您需要暂时将其存储在数据结构中,而不是将用户输入直接写入文件。当用户输入sentinel值时,则输出数据结构的内容。
在伪代码中
ask user for input
while not sentinel
add to array[user value]++
get next input
for each element in array
if value > 0
fprintf value + " "
for (int i = 0; i < value; i++)
fprintf "*"
fprintf
答案 1 :(得分:0)
您正尝试在代码中的一个阶段(区域)中执行这两个步骤。将文件操作分离到后续阶段,并使用变量存储直方图值,并将变量写入文件。您可以将输入的数字存储在一个数组中,将该数字的计数存储在另一个数组中 - 或者将它们组合成struct
并创建struct
的数组。使用typedef
从新struct
中创建一个类型。
像这样(不完整但会让你开始):
typedef struct tag_HistogramRow {
long EnteredNumber;
long Count;
} t_HistogramRow;
t_HistogramRow *typMyHistogram=NULL; // Pointer to type of t_HistogramRow, init to NULL and use realloc to grow this into an array
long lHistArrayCount=0;
您的第一步创建此数组,根据需要增长它,填写值并等待-1
第二步将所有存储的数据写入文件。
答案 2 :(得分:0)
the lines:
while (num != senitel) {
fprintf(fileId, "%d \n", num);
scanf("%d", &num);
}
would become:
while (num != senitel)
{
// echo num to file
fprintf(fileId, "%d ", num);
// echo appropriate number of '*' to file
for( int i= 0; i<num; i++ )
{
fprintf( fileId, "*" );
} // end if
// echo a newline to file
fprintf( fileId, "\n" );
// be sure it all got written to file before continuing
fflush( fileId );
// note: leading ' ' in format string enables white space skipping
if( 1 != scanf(" %d", &num) )
{ // then, scanf() failed
perror( "scanf" ); // also prints out the result of strerror( errno )
exit(1);
} // end if
} // end while