Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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/3/templates/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_Inputstream_User Input_Variable Length - Fatal编程技术网

C 从标准输入读取各种输入

C 从标准输入读取各种输入,c,inputstream,user-input,variable-length,C,Inputstream,User Input,Variable Length,我在看标准广播。用户将升级为eather类型一位数或类型三位数。 在这个问题上,哪些功能是好的 我试过了 [3]中的int={-1,-1,-1}; scanf(“%d%d%d”、[0]、[1]、[2]中的和); printf(“%d,%d,%d\n”,在[0],在[1],在[2]); 这适用于三位数字,但如果只键入一位,则不适用 例如,我希望输入为“17”或“0 1 9” 然后输出应为,例如 int amount = 1 int digits[3] = {17, -1, -1} int am

我在看标准广播。用户将升级为eather类型一位数或类型三位数。 在这个问题上,哪些功能是好的

我试过了

[3]中的int={-1,-1,-1}; scanf(“%d%d%d”、[0]、[1]、[2]中的和); printf(“%d,%d,%d\n”,在[0],在[1],在[2]); 这适用于三位数字,但如果只键入一位,则不适用

例如,我希望输入为“17”或“0 1 9” 然后输出应为,例如

int amount = 1
int digits[3] = {17, -1, -1}
int amount = 1
int digits[3] = {17, -1, -1}


您很接近您想要的,但是您读取的是int而不是string

一定是

int in[3] = {-1, -1, -1};
还允许将-1作为有效的初始值

这适用于三位数字,但如果只键入一位,则不适用

执行
scanf(“%d%d%d”、[0]、[1]、[2]中的(&d))要完成,您需要输入3个有效整数,或在错误到达EOF时完成,或给出无效输入,以便只能输入一个值,然后执行fgets then u u u sscanf_

我希望输入为“17”或“01 9”,然后输出为例如

int amount = 1
int digits[3] = {17, -1, -1}
int amount = 1
int digits[3] = {17, -1, -1}

int amount = 3
int digits[3] = {0, 1, 9}
例如,你做什么

#include <stdio.h>

int main(void)
{
  char line[32];

  if (fgets(line, sizeof(line), stdin) == line) {
    int ints[3] = { -1, -1, -1 };
    int amount = sscanf(line, "%d %d %d", &ints[0], &ints[1], &ints[2]);

    printf("%d : { %d %d %d }\n", amount, ints[0], ints[1], ints[2]);
  }

  return 0;
}
(在最后一种情况下为空行,例如刚输入)


我将数字重命名为int,因为digits让我们假设每个条目都是一个数字(例如“0”),而您需要整数

您接近所需的值,但您读取的是int而不是string

一定是

int in[3] = {-1, -1, -1};
还允许将-1作为有效的初始值

这适用于三位数字,但如果只键入一位,则不适用

执行
scanf(“%d%d%d”、[0]、[1]、[2]中的(&d))要完成,您需要输入3个有效整数,或在错误到达EOF时完成,或给出无效输入,以便只能输入一个值,然后执行fgets then u u u sscanf_

我希望输入为“17”或“01 9”,然后输出为例如

int amount = 1
int digits[3] = {17, -1, -1}
int amount = 1
int digits[3] = {17, -1, -1}

int amount = 3
int digits[3] = {0, 1, 9}
例如,你做什么

#include <stdio.h>

int main(void)
{
  char line[32];

  if (fgets(line, sizeof(line), stdin) == line) {
    int ints[3] = { -1, -1, -1 };
    int amount = sscanf(line, "%d %d %d", &ints[0], &ints[1], &ints[2]);

    printf("%d : { %d %d %d }\n", amount, ints[0], ints[1], ints[2]);
  }

  return 0;
}
(在最后一种情况下为空行,例如刚输入)


我将数字重命名为int,因为digits让我们假设每个条目都是一个数字(例如“0”),而您需要整数

这很好,不,它不行。您创建了一个指向char的指针数组,然后声明为
scanf
提供指向
int
的指针。为什么?你的编译器不会因为你这么做而对你大喊大叫吗?至于这个问题:scanf返回它得到了多少项,这样你就可以为它没有读入的项设置默认值。@SamiKuhmonen是的,你是对的。我粘贴了一个错误的版本。这个效果很好。不,它没有。您创建了一个指向char的指针数组,然后声明为
scanf
提供指向
int
的指针。为什么?你的编译器不会因为你这么做而对你大喊大叫吗?至于这个问题:scanf返回它得到了多少项,这样你就可以为它没有读入的项设置默认值。@SamiKuhmonen是的,你是对的。我粘贴了一个错误的版本。