gpt4 book ai didi

c - 为什么 printf() 不给出任何错误和 scanf() 问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:10 24 4
gpt4 key购买 nike

代码:

int main(int argc,char **argv)
{
int y,i;
printf("Number of character you entered is : %d",printf("you entered age : %d\n",i,scanf("%d",&i),printf("Enter age : "))-19);
printf("\n\n");
scanf("%d ",&y,printf("Enter number(y) : "));
printf("Value of y is %d",y);
}

这里有两个声明,在第一个声明中,我想问为什么 printf() 不给出任何错误或警告?

printf("Number of character you entered is : %d",printf("you entered age : %d\n",i,scanf("%d",&i),printf("Enter age : "))-19);

执行时的第二条语句要求输入两次,第一次在

之后

"Enter number(y) : "

输入数字后,它要求另一个输入,不知道为什么。

y 的值是你第一次输入的值那么第二次输入是怎么回事?

scanf("%d ",&y,printf("Enter number(y) : "));

最佳答案

对于第一个 printf() 语句,引用 C11 标准,第 7.21.6.1 章,fprintf()

If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored.

所以,没有产生错误。

对于scanf(),问题在于

 scanf("%d ",&y,printf("Enter number(y) : "));
^
|

格式说明符后的尾随空白。基本上,它指示在与转换说明符匹配的第一个输入之后忽略任意数量的尾随空白。当遇到非空白字符时,它实际上会完成扫描

引用章节§7.21.6.2

A directive composed of white-space character(s) is executed by reading input up to the first non-white-space character (which remains unread),.....

解决方案:删除转换说明符后的尾随空格。

scanf("%d",&y,printf("Enter number(y) : "));

FWIW,即使在格式字符串中的转换说明符的参数过多的情况下,按照 C11,第 7.21.6.2 章

定义的行为

If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored.

这是一种可怕的代码编写方式。

关于c - 为什么 printf() 不给出任何错误和 scanf() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31401790/

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