我必须使用' 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
}
答案 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;。格式说明符前面的空格指示代码跳过所有空格。