C程序从用户处获取文件名和数字范围从指定范围生成数字并打印到文件

C程序从用户处获取文件名和数字范围从指定范围生成数字并打印到文件,c,string,file,random,io,C,String,File,Random,Io,我正在编写一个程序,从用户那里获取一些信息,然后将结果写入一个文件。程序将获得文件名、要生成的数字数量、要生成的最低和最高数字,然后将其全部写入由用户命名的文件中 程序正在执行两项不正确的操作: 它正在生成超出用户指定范围的数字 它正在添加一个?在文件名的末尾,我尝试使用strlen删除字符串的最后一个字符,但我得到了一个错误:内置函数“strlen”的不兼容隐式声明 #包括 #包括 int main() { chars[100]; 文件*fout; int i,x,len; int h,l,

我正在编写一个程序,从用户那里获取一些信息,然后将结果写入一个文件。程序将获得文件名、要生成的数字数量、要生成的最低和最高数字,然后将其全部写入由用户命名的文件中

程序正在执行两项不正确的操作:

  • 它正在生成超出用户指定范围的数字

  • 它正在添加一个?在文件名的末尾,我尝试使用strlen删除字符串的最后一个字符,但我得到了一个错误:内置函数“strlen”的不兼容隐式声明

  • #包括
    #包括
    int main()
    {
    chars[100];
    文件*fout;
    int i,x,len;
    int h,l,q,a;
    printf(“请输入文件名:”);
    fgets(s、sizeof(s)、stdin);
    printf(“我们应该生成多少个数字:”);
    scanf(“%d”和“&q”);
    printf(“生成的最低数量:”);
    scanf(“%d”和“&l”);
    printf(“要生成的最高数字:”);
    scanf(“%d”、&h);
    fout=fopen(s,“wb”);
    a=h-l;
    如果(fout==NULL)
    {
    printf(“该文件不可用\n”);
    出口(1);
    }
    fprintf(fout,“%d\n”,q);
    对于(i=0;i
    • 关于文件名:删除
      s
      末尾
      fgets()之后的换行符
      '\n'
      (或
      '\x0a'
      ):

      为了完整性:在windows上,您必须删除回车符+换行符
      '\r'
      +
      '\n'
      (或
      '\x0d'
      +
      '\x0a'

    • 关于错误的数字:应该是
      x=(rand()%a)+l(模数范围+最低值,而不是相反)

    欢迎使用堆栈溢出!请花点时间阅读这篇文章。考虑一个能更好解释你的问题的标题。您的#2是因为
    strlen
    需要包含
    string.h
    。我对您所指的内容和\0a的位置有点困惑。这是在linux客户端上。当然应该是“\x0a”。。。它是换行符本身(与“\n”相同)。看看更新的答案。我希望现在清楚了
    #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;
    }
    
    if( s[strlen(s)-1] == '\n' )
         s[strlen(s)-1] = '\0';