我正在编写一个程序,从用户那里获得一些东西,然后将结果写入文件。程序将获取文件名、要生成的数字数、要生成的最低和最高数字,然后将其全部写入由用户命名的文件中。
程序正在做两件不正确的事情:
-
正在生成超出用户指定范围的数字
-
它正在添加一个?到文件名的末尾,我尝试使用strlen来删除字符串的最后一个字符,但我得到和错误:内置函数'strlen'的不兼容隐式声明。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char s[100];
FILE *fout;
int i, x, len;
int h, l, q, a;
printf("Please enter the file name: ");
fgets(s, sizeof(s), stdin);
printf("How many numbers should we generate: ");
scanf("%d", &q);
printf("lowest number to generate: ");
scanf("%d", &l);
printf("Highest number to generate: ");
scanf("%d", &h);
fout = fopen(s, "wb");
a = h - l;
if ( fout == NULL)
{
printf("That file is not availablen");
exit(1);
}
fprintf(fout, "%dn", q);
for (i=0; i < q; ++i)
{
x = (rand() % l) + a;
fprintf(fout, "%d ", x);
}
fclose(fout);
return 0;
}
-
关于文件名:删除
fgets()
后s
末尾的换行字符'n'
(或'x0a'
):if( s[strlen(s)-1] == 'n' ) s[strlen(s)-1] = ' ';
为完整起见:在windows上,您必须删除回车+换行
'r'
+'n'
(或'x0d'
+'x0a'
) - 关于错误的数字:它应该是
x = (rand() % a) + l;
(模数范围+最低,而不是相反)