printf里有printf这什么意思

C语言 码拜 10年前 (2015-05-11) 1359次浏览 0个评论

int main()
{
char *str1=”WelcomeTo\0XiyouLinux\n”;
printf(“%d\n”,printf(“%s”,str1));
return 0;
}

如上输出结果是
WelcomeTo9

如果我在”%d\n”这里的%前面加一个空格

printf(”   %d\n”,printf(“%s”,str1));

那么输出结果是
WelcomeTo   9

这样的话,只要有printf的地方,就一定输出,括号里面的先输出,是这样吗?

但是,接下来,括号里面的输出的是什么呢?“%d”输出的是什么?看起来是WelcomeTo的长度,但有关系吗?

#include<string.h>
#include<stdio.h>
int main()
{
	char *str1="WelcomeTo\0XiyouLinux\n";
	char str2[]="WelcomeTo\0XiyouLinux\n";
	printf("%d\n",printf("%s",str1));
	printf("%ld,%ld\n",strlen(str1),strlen(str2));
	printf("%lu,%lu\n",sizeof(str1),sizeof(str2));
	return 0;
}

完整的代码是这样的
自己是在ubuntu下的
用gdb简单的调试看看
因为是初学者 所以见谅printf里有printf这什么意思

15分
printf()的返回值就是打印的字符个数。
语句
printf(”   %d\n”,printf(“%s”,str1));
首先,
printf(“%s”,str1);打印出str1,返回值是9
接着
printf(” %d”, 9);  打印9
5分
printf, wprintf
Print formatted output to the standard output stream.

int printf( const char *format [, argument]… );

int wprintf( const wchar_t *format [, argument]… );

Routine Required Header Compatibility 
printf <stdio.h> ANSI, Win 95, Win NT 
wprintf <stdio.h> or <wchar.h> ANSI, Win 95, Win NT 

For additional compatibility information, see Compatibility in the Introduction.

Libraries

LIBC.LIB Single thread static library, retail version 
LIBCMT.LIB Multithread static library, retail version 
MSVCRT.LIB Import library for MSVCRT.DLL, retail version 

Return Value

Each of these functions returns the number of characters printed, or a negative value if an error occurs.

Parameters

format

Format control

argument

Optional arguments

Remarks

The printf function formats and prints a series of characters and values to the standard output stream, stdout. If arguments follow the format string, the format string must contain specifications that determine the output format for the arguments. printf and fprintf behave identically except that printf writes output to stdout rather than to a destination of type FILE.

wprintf is a wide-character version of printf; format is a wide-character string. wprintf and printf behave identically otherwise. 

Generic-Text Routine Mappings

TCHAR.H Routine  _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined 
_tprintf printf printf wprintf 

The format argument consists of ordinary characters, escape sequences, and (if arguments follow format) format specifications. The ordinary characters and escape sequences are copied to stdout in order of their appearance. For example, the line

printf(“Line one\n\t\tLine two\n”); 

produces the output

Line one
        Line two

Format specifications always begin with a percent sign (%) and are read left to right. When printf encounters the first format specification (if any), it converts the value of the first argument after format and outputs it accordingly. The second format specification causes the second argument to be converted and output, and so on. If there are more arguments than there are format specifications, the extra arguments are ignored. The results are undefined if there are not enough arguments for all the format specifications.

Example

/* PRINTF.C: This program uses the printf and wprintf functions
 * to produce formatted output.
 */

#include <stdio.h>

void main( void )
{
   char   ch = “”h””, *string = “computer”;
   int    count = -9234;
   double fp = 251.7366;
   wchar_t wch = L””w””, *wstring = L”Unicode”;

   /* Display integers. */
   printf( “Integer formats:\n”
           “\tDecimal: %d  Justified: %.6d  Unsigned: %u\n”,
           count, count, count, count );

   printf( “Decimal %d as:\n\tHex: %Xh  C hex: 0x%x  Octal: %o\n”,
            count, count, count, count );

   /* Display in different radixes. */
   printf( “Digits 10 equal:\n\tHex: %i  Octal: %i  Decimal: %i\n”,
            0x10, 010, 10 );

   /* Display characters. */

   printf(“Characters in field (1):\n%10c%5hc%5C%5lc\n”, ch, ch, wch, wch);
   wprintf(L”Characters in field (2):\n%10C%5hc%5c%5lc\n”, ch, ch, wch, wch);

   /* Display strings. */

   printf(“Strings in field (1):\n%25s\n%25.4hs\n\t%S%25.3ls\n”,
   string, string, wstring, wstring);
   wprintf(L”Strings in field (2):\n%25S\n%25.4hs\n\t%s%25.3ls\n”,
       string, string, wstring, wstring);

   /* Display real numbers. */
   printf( “Real numbers:\n\t%f %.2f %e %E\n”, fp, fp, fp, fp );

   /* Display pointer. */
   printf( “\nAddress as:\t%p\n”, &count);

   /* Count characters printed. */
   printf( “\nDisplay to here:\n” );
   printf( “1234567890123456%n78901234567890\n”, &count );
   printf( “\tNumber displayed: %d\n\n”, count );
}

Output

Integer formats:
   Decimal: -9234  Justified: -009234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Digits 10 equal:
   Hex: 16  Octal: 8  Decimal: 10
Characters in field (1):
         h    h    w    w
Characters in field (2):
         h    h    w    w
Strings in field (1):
                 computer
                     comp
   Unicode                      Uni
Strings in field (2):
                 computer
                     comp
   Unicode                      Uni
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

Address as:   0012FFAC

Display to here:
123456789012345678901234567890
   Number displayed: 16

Floating-Point Support Routines |  Stream I/O Routines |  Locale Routines

See Also   fopen, fprintf, scanf, sprintf, vprintf Functions

10分
printf ("%d\n", printf ("%d\n", printf ("%d\n", printf ("%d\n", 8))));
引用 2 楼 zhangxiangDavaid 的回复:

printf()的返回值就是打印的字符个数。
语句
printf(”   %d\n”,printf(“%s”,str1));
首先,
printf(“%s”,str1);打印出str1,返回值是9
接着
printf(” %d”, 9);  打印9

谢谢,原来是这样

引用 4 楼 sholber 的回复:
printf ("%d\n", printf ("%d\n", printf ("%d\n", printf ("%d\n", 8))));

又是前辈您啊让我好好感悟吧

引用 4 楼 sholber 的回复:
printf ("%d\n", printf ("%d\n", printf ("%d\n", printf ("%d\n", 8))));

8
2
2
2
2
好吧 只输入了一个8
返回值补应该是8吗
为什么都是2了
printf整体也是算一次的吗?那这样想依次往外返回值应该是递加的吧

引用 7 楼 zy_dream 的回复:
Quote: 引用 4 楼 sholber 的回复:
printf ("%d\n", printf ("%d\n", printf ("%d\n", printf ("%d\n", 8))));

8
2
2
2
2
好吧 只输入了一个8
返回值补应该是8吗
为什么都是2了
printf整体也是算一次的吗?那这样想依次往外返回值应该是递加的吧

据说printf的返回值是它所输出的字符数。但是不要忘了,”%d\n”这个控制串,不但含有要输出的数字,还有一个换行符\n,这也算一个被输出的字符哇。
哇哇嘎嘎~~~

10分
今天怎么回事,各种邀请回答问题的提示呢?什么时候开的这个功能,还是CSDN推送的!

1.
我给你的的代码稍微修改了一下,试试这样输出试试

printf("%d\n", printf("%d\n", printf("%s\n",str1)));

2. 
另用man 3 printf 看看 printf的返回值。

Upon  successful  return,  these functions return the number of characters printed (not including the trailing ’\0’ used to end
       output to strings).

总结,这个问题不但告诉我们printf返回值的问题,还告诉我们了printf嵌套时候的中的执行顺序。

貌似有些理解懂了
待我好好的在品味下
最后
我打字有时不仔细啊,有些急年轻人气血旺盛 要注意

引用 10 楼 zy_dream 的回复:

貌似有些理解懂了
待我好好的在品味下
最后
我打字有时不仔细啊,有些急年轻人气血旺盛 要注意

关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:

A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感

A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)

如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明printf里有printf这什么意思
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!