scanf在c中获取整数和字符

scanf get integers and chars in c

我必须使用 'scanf' 来获取一个数组的有效 int 值和另一个数组(“垃圾数组”)的其他字符,但无法使其正常工作并继续接收警告,如“警告格式指定类型 'char *' 但参数的类型为 'int (*)[4]'.

我做错了什么?

int array[4];
char numS[4];
char garbage[100];
num = scanf(" %[0-9]d %s", &array, &garbage);

我正在尝试使用简单的输入来输入“1”或“2”。我想将用户输入的整数存储在数组中。我有一个这样的:

for (i = 0; i<5; i++)
{
  printf("Write your first number");
  num = scanf(" %[0-9]d %s", &array, &garbage);
  printf("\nNew value: %d", array[i]); //Not showing value
}

%[0-9]d 转换说明符用于后跟字母 d 的数字字符串,例如123d。它不适用于整数。

您应该将输入的两边都读取为字符串,然后自己进行整数转换。这是执行此操作的循环示例:

for (;;) {
    char garbage[100];
    int g;
    if ((g = scanf(" %99[^0-9\n\r]", garbage)) != EOF) {
        // Do something with garbage
    } else {
        break;
    }
    char data[100];
    int d;
    if ((d = scanf(" %99[0-9]", data)) != EOF) {
        // Do something with data
    } else {
        break;
    }
    if (g == 0 && d == 0) {
        // Both inputs are empty
        break;
    }
}

%99[^0-9\n\r]表示"up to 99 non-digits except end-of-line characters"; %99[0-9] 表示 "up to 99 digits"。格式说明符前面的 Space 指示代码跳过所有空格。

Demo.