gpt4 book ai didi

c - 演示结构的程序没有收到正确的输入值

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:29 25 4
gpt4 key购买 nike

这个简单的程序通过确定明天的日期演示了结构的使用。它要求输入今天的日期:

#include    <stdlib.h>
#include <stdio.h>

int main ( int argc, char *argv[] )
{

struct date {
int month;
int day;
int year;
}; /* ---------- end of struct date ---------- */

struct date today, tomorrow;

const int daysPerMonth[12] = { 31, 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31 };

printf ( "Enter today's date (mm dd yyyy): \n" );
scanf ( "%i%i%i", &today.month, &today.day, &today.year );

if ( today.day != daysPerMonth[today.month - 1] ) {
tomorrow.day = today.day + 1;
tomorrow.month = today.month;
tomorrow.year = today.year;
}
else if ( today.month == 12 ) { /* end of year */
tomorrow.day = 1;
tomorrow.month = 1;
tomorrow.year = today.year + 1;
}
else { /* end of month */
tomorrow.day = 1;
tomorrow.month = today.month + 1;
tomorrow.year = today.year;
}

printf ( "Tomorrow's date is %i/%i/%.2i.\n", tomorrow.month,
tomorrow.day, tomorrow.year % 100 );

return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */

运行它时,我得到了什么:

Enter today's date (mm dd yyyy):

06 09 2014

Tomorrow's date is 6/1/09.

但是当我运行 gdb 并打印出输入值时:

(gdb) p today.month

$1 = 6

(gdb) p today.day

$2 = 0

(gdb) p today.year

$3 = 9

我很困惑。为什么输入会得到这样不正确的值?

最佳答案

呵呵。 scanf%i 说明符表示读取一系列整数格式,这类似于为 C 整数文字指定的格式。

当您键入前导 0 时,表示后面是八进制 数字。由于 9 不是有效的八进制数字,因此只读取值 09留给后面的%i,所以读到的三个数分别是6092014 保留在输入流中。

要以 10 为基数输入,将 %i 更改为 %d,然后您的程序将运行。

关于c - 演示结构的程序没有收到正确的输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com