我正在编写一个程序来从用户那里获取一些东西,然后将结果写入文件。程序将获取文件名,要生成的数字数,要生成的最低和最高数,然后将其全部写入用户命名的文件。
该程序正在做两件不正确的事情:
它正在生成超出用户指定范围的数字
它正在添加?在文件名的末尾,我尝试使用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 available\n");
exit(1);
}
fprintf(fout, "%d\n", q);
for (i=0; i < q; ++i)
{
x = (rand() % l) + a;
fprintf(fout, "%d ", x);
}
fclose(fout);
return 0;
}
答案 0 :(得分:1)
:在'\n'
之后的'\x0a'
末尾删除换行符s
(或fgets()
):
if( s[strlen(s)-1] == '\n' )
s[strlen(s)-1] = '\0';
为了完整性:在Windows上你必须删除回车+换行符'\r'
+ '\n'
(或'\x0d'
+ '\x0a'
)
x = (rand() % a) + l;
(模数范围+最低,而不是相反)