我目前正在完成一项任务,很好奇编译时这个警告是什么以及如何解决它。它将构建,但是当我调试它将得到一个错误屏幕。以下是出现的警告。
1以及c:\用户\ cesteves \文件\ C 编程\库存\库存\ inventory.cpp(48):警告C4473: ' scanf_s' :没有为格式字符串
传递足够的参数注意:占位符及其参数需要2个可变参数, 但提供了1个
注意:格式字符串需要缺少可变参数2 '%S'注意:此参数用作缓冲区大小
#include "stdafx.h"
#include <stdio.h>
void main()
{
struct date {
int day;
int month;
int year;
};
struct details {
char name[20];
int price;
int code;
int qty;
struct date mfg;
};
struct details item[50];
int n, i;
printf("Enter number of items:");
scanf_s("%d", &n);
for (i = 0; i < n; i++) {
printf("Item name: \n");
scanf_s("%s", item[i].name);
printf("Item code: \n");
scanf_s("%d", &item[i].code);
printf("Quantity: \n");
scanf_s("%d", &item[i].qty);
printf("price: \n");
scanf_s("%d", &item[i].price);
printf("Manufacturing date(dd-mm-yyyy): \n");
scanf_s("%d-%d-%d", &item[i].mfg.day, &item[i].mfg.month, &item[i].mfg.year);
}
printf(" ***** INVENTORY ***** \n");
printf("----------------------------------------------------------------- - \n");
printf("S.N.| NAME | CODE | QUANTITY | PRICE| MFG.DATE \n");
printf("----------------------------------------------------------------- - \n");
for (i = 0; i < n; i++)
printf("%d %-15s %-d %-5d %-5d%d / %d / %d \n", i + 1, item[i].name, item[i].code, item[i].qty,item[i].price, item[i].mfg.day, item[i].mfg.month,item[i].mfg.year);
printf("----------------------------------------------------------------- - \n");
}
答案 0 :(得分:5)
您应该提供缓冲区的大小。例如,如果您只读取一个char,它应该是这样的:
char c;
scanf_s("%c", &c, 1);
请阅读ref!
此外,structs
很高兴放在main()
之前。关于structs
的基本用法,我总是考虑example。
在你的情况下,main的原型应该是int main(void)
。检查一下:int main() vs void main() in C
在您的代码中,更改此内容:
scanf_s("%s", item[i].name);
到此:
scanf_s("%s", item[i].name, 20);
因为这个:
struct details {
char name[20];
..
为其他人做同样的事情..
答案 1 :(得分:1)
scanf_s("%s", item[i].name);
scanf_s
要求使用说明符%s
,%c
和%[
作为第三个参数。
你需要这样写 -
scanf_s("%s", item[i].name,20);
类似地,对于输入单个字符传递1
作为大小。