Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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程序,我希望能够从用户那里得到一行输入,并把它转换成10个不同的数字。例如,系统将提示用户输入一些数字,用户最多可输入10个数字:_C_Arrays_Input_Integer - Fatal编程技术网

从用户获取多个整数作为输入 我知道C++,但是我正在尝试写我的第一个C程序,我希望能够从用户那里得到一行输入,并把它转换成10个不同的数字。例如,系统将提示用户输入一些数字,用户最多可输入10个数字:

从用户获取多个整数作为输入 我知道C++,但是我正在尝试写我的第一个C程序,我希望能够从用户那里得到一行输入,并把它转换成10个不同的数字。例如,系统将提示用户输入一些数字,用户最多可输入10个数字:,c,arrays,input,integer,C,Arrays,Input,Integer,最多可输入10个数字: >344121245435234 44 199 4735890 034001 154595 然后我想将它们存储在一个数组中,稍后再处理它们。我一直在寻找如何获取输入,但我发现的大部分内容都不清楚。任何帮助都将不胜感激,谢谢 关于一些C函数,您需要阅读一些内容: 阅读整行。 删除末尾的换行符 将行标记化 将每个字符串转换为整数 将它们存储在一个数组中 如果您不担心无效输入,可以使用读取C字符串。对于一些C函数,您需要进行一些读取: 阅读整行。 删除末尾的换行符 将行标记化

最多可输入10个数字:

>344121245435234 44 199 4735890 034001 154595


然后我想将它们存储在一个数组中,稍后再处理它们。我一直在寻找如何获取输入,但我发现的大部分内容都不清楚。任何帮助都将不胜感激,谢谢

关于一些C函数,您需要阅读一些内容:

  • 阅读整行。 删除末尾的换行符
  • 将行标记化
  • 将每个字符串转换为整数
  • 将它们存储在一个数组中

  • 如果您不担心无效输入,可以使用读取C字符串。

    对于一些C函数,您需要进行一些读取:

  • 阅读整行。 删除末尾的换行符
  • 将行标记化
  • 将每个字符串转换为整数
  • 将它们存储在一个数组中

  • 如果您不担心无效输入,您可以使用读取C字符串。

    您可以从用户输入中读取行,将其标记化,然后使用以下命令直接从标记中检索数字:

    //数组大到可以容纳10个数字:
    整数[10]={0};
    //从用户输入中读取行:
    字符输入字符串[200];
    fgets(输入字符串,200,标准输入);
    //将输入字符串拆分为标记:
    char*token=strtok(inputString,“”);
    //从每个令牌检索一个数字:
    int i=0;
    while(令牌!=NULL&&i<10){
    如果(sscanf(令牌,“%d”&数字[i++])!=1)
    ;//TODO:错误:尚未检索到编号
    令牌=strtok(空,“”);
    }
    
    您可以从用户输入中读取行,将其标记化,然后使用以下命令直接从标记中检索数字:

    //数组大到可以容纳10个数字:
    整数[10]={0};
    //从用户输入中读取行:
    字符输入字符串[200];
    fgets(输入字符串,200,标准输入);
    //将输入字符串拆分为标记:
    char*token=strtok(inputString,“”);
    //从每个令牌检索一个数字:
    int i=0;
    while(令牌!=NULL&&i<10){
    如果(sscanf(令牌,“%d”&数字[i++])!=1)
    ;//TODO:错误:尚未检索到编号
    令牌=strtok(空,“”);
    }
    
    如果您确定用户总是要输入由空格/制表符和换行符分隔的整数,并且不超过10个,那么您可以使用这一行完成以下操作:

    int arr[10];
    int count = 0;
    
    while(scanf("%d",&(arr[count++])))
       ;
    

    它利用了返回匹配项的数量这一事实

    如果您确定用户总是要输入由空格/制表符和换行符分隔的整数,并且不超过10个,那么您可以使用这一行来完成以下操作:

    int arr[10];
    int count = 0;
    
    while(scanf("%d",&(arr[count++])))
       ;
    

    它利用了返回匹配项的数量这一事实

    您可以使用
    fgets
    读取整行或
    scanf/fscanf
    读取单个数字。您可以使用
    fgets
    读取整行或
    scanf/fscanf
    读取单个数字。或者,如果他是不用担心无效输入。那么,有没有比“读一行”更好的方法呢?我认为这是最好的方法,但我想我可能错了?@user209306 scanf()在给出无效输入时是出了名的糟糕。更简单的是,您可以在循环中使用fget(),将每个字符串转换为整数,并在读取时进行验证,而不是在一行中读取所有数字并对其进行分析。@KingsIndian,
    scanf(3)
    并不是“臭名昭著的坏”,您只需检查有多少输入项匹配(返回值)。@vonbrand它并不是那么简单。如果您在scanf需要int(%d)时输入字符串,那么输入仍然存在于输入中,并且在不清除它的情况下无法继续。或者,如果不担心无效输入,他也可以直接使用
    scanf
    读取标准输入并同时解析。那么,有没有比“读取一行”更好的方法呢?我认为这是最好的方法,但我想我可能错了?@user209306 scanf()在给出无效输入时是出了名的糟糕。更简单的是,您可以在循环中使用fget(),将每个字符串转换为整数,并在读取时进行验证,而不是在一行中读取所有数字并对其进行分析。@KingsIndian,
    scanf(3)
    并不是“臭名昭著的坏”,您只需检查有多少输入项匹配(返回值)。@vonbrand它并不是那么简单。如果您在scanf需要整数(%d)时输入字符串,则输入仍将存在于输入中,并且在未清除该字符串的情况下无法继续。这包括用户在多行中输入10个数字的情况。此外,此
    scanf
    导致仅当输入10个数字或至少输入1个不能作为数字读取的非白色字符序列时,读取才会停止。更安全的方法是使用
    (count<10)和&scanf(“%d”,&arr[count++])
    作为条件。很好,您明确列出了要求,“如果您确定用户总是要输入。不超过10”。我想补充一句,“如果用户决定输入10个以上的数字,您将有一个缓冲区溢出,允许用户执行任意代码。”(基本上,在仔细构造前导后,用户可以输入当函数尝试返回时将执行的机器指令的整数表示。)@vondbrand的安全检查是非常值得的,也是一个很好的习惯。有关更多信息,请参阅此说明,当用户在超过一行的范围内输入10个数字时会出现这种情况。此外,此
    scanf
    导致只有输入10个数字时才会停止读取