scanf在c中获取整数和字符

时间:2015-09-20 09:15:32

标签: c scanf

我必须使用' scanf'获取有效的int值到一个数组和其他chars到另一个数组('垃圾数组)但不能使它工作并继续接收警告,如警告格式指定类型'char *',但参数有输入'int (*)[4]'

我做错了什么?

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

我现在尝试使用简单的输入' 1'或' 2'。我希望在数组中存储用户输入int。我喜欢这样:

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
}

1 个答案:

答案 0 :(得分:1)

%[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]表示&#34;最多99个非数字,除了行尾字符&#34 ;; %99[0-9]表示&#34;最多99位&#34;。格式说明符前面的空格指示代码跳过所有空格。

Demo