Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将文本文件扫描到数组中?_C_Arrays - Fatal编程技术网

C 将文本文件扫描到数组中?

C 将文本文件扫描到数组中?,c,arrays,C,Arrays,我有一个文本文件,我们叫它numbers.txt,我需要把它扫描成一个数组 number.txt(下面是内部内容) 特殊值-1表示列表结束 我有点搞不清楚如何把它放到我的数组中。我知道我需要一个环,但我不能把我的头围绕它。另外,我不是在程序中扫描文件,而是在终端中进行扫描 taylor>文件

我有一个文本文件,我们叫它numbers.txt,我需要把它扫描成一个数组

number.txt(下面是内部内容)

特殊值-1表示列表结束

我有点搞不清楚如何把它放到我的数组中。我知道我需要一个环,但我不能把我的头围绕它。另外,我不是在程序中扫描文件,而是在终端中进行扫描

taylor>文件 所以我会像用户输入一样设置它

 int main()
 {
    int numbers[50];
    int n, i;
    //scanf("%i", &n) 
    for(i = 0; i < 50; i++)
    {
        //not sure what to do
    }
 }
intmain()
{
整数[50];
int n,i;
//scanf(“%i”、&n)
对于(i=0;i<50;i++)
{
//不知道该怎么办
}
}
OP需要考虑许多停止条件

  • 每个操作读取的数据为-1“…我希望它在达到-1后停止。就像
    而(!=-1)
    运行循环一样。我也可以使用if语句来完成。”。这可以通过测试读取的值来检测

  • 最多50个数字。测试读取的数字计数

  • 没有更多输入(文件末尾)。这可以通过测试
    scanf()
    EOF
    返回值来检测

  • 罕见的输入错误。(例如,键盘电缆断开。)这也可以通过测试
    scanf()
    EOF
    返回值来检测

  • 如果输入是非数字的。这可以通过测试
    scanf()
    返回值0来检测

  • 如果输入文本在
    int
    范围内。下面未显示对此的检测

  • 不清楚是否所有数据都需要在一行上,因此需要检测
    '\n'
    。下面未显示对此的检测

  • 范例

     int main()
     {
        int numbers[50];
        int i = 0;
        for( ; i < 50; i++) {
          int n;
          int conversion_count = scanf("%i", &n);
          if (conversion_count != 1) {
            break;  // End-of-file, input error, non-numeric input
          }
          if (n == -1) {
            break;
          }
          numbers[i] = n;
        }
        printf("%d numbers read.\n", i);
     }
    
    intmain()
    {
    整数[50];
    int i=0;
    对于(;i<50;i++){
    int n;
    int conversion_count=scanf(“%i”&n);
    如果(转换计数!=1){
    break;//文件结尾,输入错误,非数字输入
    }
    如果(n==-1){
    打破
    }
    数字[i]=n;
    }
    printf(“读取%d个数字。\n”,i);
    }
    
    发布的代码无法编译!它缺少
    #include
    语句

    以下是代码的一个版本:

  • 干净地编译
  • 遵循公理:每行只有一条语句,每条语句(最多)有一个变量声明
  • 检查I/O错误并在stderr上公布
  • 包含所需的
    #include
    语句
  • 为了便于阅读和理解:通过一个空行分隔代码块(for、if、else、while、do…while、switch、case、default)
  • 删除未使用的变量
  • 如果/当读取
    -1
    时退出读取循环
  • 避免使用“神奇”数字,给它们起有意义的名字
  • 现在是代码

     #include <stdio.h>  // scanf(), perror()
     #include <stdlib.h> // exit(), EXIT_FAILURE
    
     #define MAX_NUMBERS 50
    
     int main( void )
     {
        int numbers[ MAX_NUMBERS];
        int i;
    
        //scanf("%i", &n)
        for(i = 0; i < MAX_NUMBERS; i++)
        {
            if( 1 != scanf( "%d", &numbers[i] ) )
            {
                perror( "scanf for number failed" );
                exit( EXIT_FAILURE );
            }
    
            // implied else, scanf successful
    
            if( -1 == numbers[i] ) break;
        }
     }
    
    #包括//scanf()、perror()
    #包括//退出(),退出失败
    #定义最大值为50
    内部主(空)
    {
    整数[最大值];
    int i;
    //scanf(“%i”、&n)
    对于(i=0;i
    A
    fgets
    sscanf
    组合出现在脑海中…(Welp,你正在做输入重定向,nvm)这样更好,我删除了我的答案。谢谢你们两位的帮助。
     #include <stdio.h>  // scanf(), perror()
     #include <stdlib.h> // exit(), EXIT_FAILURE
    
     #define MAX_NUMBERS 50
    
     int main( void )
     {
        int numbers[ MAX_NUMBERS];
        int i;
    
        //scanf("%i", &n)
        for(i = 0; i < MAX_NUMBERS; i++)
        {
            if( 1 != scanf( "%d", &numbers[i] ) )
            {
                perror( "scanf for number failed" );
                exit( EXIT_FAILURE );
            }
    
            // implied else, scanf successful
    
            if( -1 == numbers[i] ) break;
        }
     }