我有一些关于这段代码的问题,我想编译它,但它不能编译,因为有些错误。我在那里讲错了代码...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000
typedef struct{
int film_id;
char title[255];
char description[1023];
unsigned int release_year;
char rental_duration;
float rental_rate;
unsigned char length;
float replacement_cost;
char rating[10];
char last_update[30];
} RECORD_t, *RECORD;
int main(){
int i,R1;
char R[1];
RECORD rec = (RECORD)malloc(sizeof(RECORD_t)*MAX);
FILE *file = fopen("data.txt", "rb");
if (file == NULL) {
printf("Cannot open the file.\n");
exit(0);
}
fread(rec, sizeof(RECORD_t)*MAX, 1, file);
fclose(file);
printf("İd Numarası Giriniz : \n");
scanf("%d",&R1);
for (i=0; i<1000; i++){
if (R1 == rec[i].film_id) {
printf("TITLE: %s\n", rec[i].title); printf("Enter New TITLE : "); scanf("%s",rec[i].title);
printf("DESCRIPTION: %s\n", rec[i].description); printf("Enter New Description : "); scanf("%s",rec[i].description);
// My problem is this line :-------------------
printf("RELEASE YEAR: %d\n", rec[i].release_year); printf("Enter New RELEASE YEAR : "); scanf("%d",rec[i].release_year);
printf("RENTAL DURATION: %d\n", rec[i].rental_duration); printf("Enter New RENTAL DURATION : "); scanf("%d",rec[i].rental_duration);
printf("RENTAL RATE: %f\n", rec[i].rental_rate); printf("Enter New RENTAL RATE : "); scanf("%f",rec[i].rental_rate);
printf("REPLACEMENT COST: %f\n", rec[i].replacement_cost); printf("Enter New REPLACEMENT COST : "); scanf("%f",rec[i].replacement_cost);
printf("RATING: %s\n", rec[i].rating); printf("Enter New RATING : "); scanf("%s",rec[i].rating);
printf("LAST UPDATE: %s\n", rec[i].last_update); printf("Enter New LAST UPDATE : "); scanf("%s",rec[i].last_update);
}
}
}
file = fopen("data.txt", "wb");
fwrite(rec, sizeof(RECORD_t)*MAX, 1, file);
fclose(file);
free(rec);
return 1;
}
在编译时只有int和float变量不起作用
warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘unsigned int’ [-Wformat=]
printf("RELEASE YEAR: %d\n", rec[i].release_year); printf("Enter New RELEASE YEAR : "); scanf("%d",rec[i].release_year);
^
请帮帮我://
答案 0 :(得分:6)
%d
的{{1}}和%f
格式说明符分别指向scanf
和int
的地址。另外,float
是release_year
,因此应使用unsigned int
说明符,对于%u
,rental_duration
,char
应该是使用
所以这些:
%hhd
应改为:
scanf("%d",rec[i].release_year);
scanf("%d",rec[i].rental_duration);
scanf("%f",rec[i].rental_rate);
scanf("%f",rec[i].replacement_cost);
你没有看到scanf("%u",&rec[i].release_year);
scanf("%hhd",&rec[i].rental_duration);
scanf("%f",&rec[i].rental_rate);
scanf("%f",&rec[i].replacement_cost);
的问题,因为数组 - 传递给函数时 - 会衰减到指向数组第一个元素的指针。
编辑:
使用%s
的正确大小说明符特别重要。如果您对scanf
使用%d
而不是%hhd
,char
将尝试写入4字节位置(假设scanf
为32位而不是一个字节,这将导致未定义的行为。
从手册页:
int
答案 1 :(得分:4)
调用$(document).ready(function()
{
$('select').each(function()
{
val = $(this).find('option:selected').val();
$(this).prev().html(val);
});
});
scanf()
答案 2 :(得分:2)
显然,您的问题来自scanf("%d",rec[i].release_year);
。
scanf
需要一个指向变量的指针,以便能够将de读取值存储到其中。所以必须是:scanf("%d",&(rec[i].release_year));
注意:不要在同一行上放置几个命令。您的工具将您指向错误的行,而不是指向它的函数。如果您将此行拆分为3(printf + printf + scanf),您会看到更快的问题:)