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

时间:2015-06-03 17:09:18

标签: c string file random io

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

该程序正在做两件不正确的事情:

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

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

  3. #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;
    }
    

1 个答案:

答案 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;(模数范围+最低,而不是相反)