stdio.h

Overview

eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO2d61PiTNbAv89fMeV+fcx2n77vNy8w4lxyRXHUt7asXHUwMDAwXHUwMDAxo0CQRFG3nv/9PVx1MDAxZC9ANDNxloTMOlrlXGZJoJvO+fW5duc/X75+XYlcdTAwMWVG3sq/vq54922373fG7mTlL3v8zlx1MDAxYod+MMRTXHUwMDEwv1x1MDAwZYPbcTu+8jKKRuG//vlPdzRyen7UXG6Ca6dcdTAwMWRcZp7e5vW9gTeMQrzw//D116//if/ONFx1MDAxNHn3UXxtfHSmXHUwMDE5opJH94Nh3CRTXHUwMDAw1Fx1MDAxOEpfL/DDTWwp8jp4tuv2Q296xlx1MDAxZVpRj15cdTAwMWSCtlT+/t3+Klx1MDAxZKpwtXI+bbXr9/tH0UM/7lBcdTAwMTjg956eXHUwMDBio3Fw7X33O9Hly5efOZ72rnFw27tcdTAwMWN6of3i025cdTAwMDYjt+1HXHUwMDBm9lx1MDAxOCGvR91hL/6M6ZF7fMWBOEwzoVx1MDAwNGeGXHUwMDBiNv1cdTAwMTT7flx1MDAxMOBcdTAwMDAjXFxqJVx1MDAxMl3aXGL6wdh26Vx1MDAxZtSzv9NOtdz2dVx1MDAwZns27LxeXHUwMDEzjd1hOHLHeI+m102ev6xWjlx1MDAxZGfgXHUwMDA2pFx1MDAxMkpPu3Dp+b3LKO7HtHUvXHUwMDFlfqZcdPZLXHUwMDEz83rCNjmqdWJcdTAwMTn493TMx+7Aq9l3XGZv+/3ZgVx1MDAxYnaeXHUwMDA3bu5Ey56ozIjT9KNuR1x1MDAxZPfp3lNcdTAwMDVcXIMhilxuOu1Z31x1MDAxZl4nP65cdTAwMWa0r99cdTAwMTGXbjCMjvxHL1x1MDAxNsC5o1V34PdcdTAwMWbmbmcsujiIJ+7Yd1t9L1xcmTu11vd7VpJX+l53XsQjXHUwMDFm4Xo9XHUwMDFkXHUwMDA1o+nZNjbl+kNv/HZogrHf84du/zi9Wfym3tbLvaHOzN1puaFnz9rjOj74919cdTAwMWZcdTAwMDNSk+TBXHUwMDE3XHUwMDFlqVCGXHUwMDAyV5RlXHUwMDA2st97PGSj6vaxd3d/wcngaHMrqpVcdTAwMWJIyYhDqZBcdTAwMDYo01LRqYDHQHLmcK6Z5GBJgfyoVOBIhlQyYoRcIoxOR+BcdTAwMDdUKq1cdTAwMTQn5DNR+Y+O17VcdTAwMDJfKJNvXHUwMDFhzZNIXG6pSKL2XHUwMDA0xVx1MDAwMFh2JMPW/n3Izvqr91x1MDAwMz7qflx1MDAxYlXF1XC/3EhcdTAwMDJcdTAwMTVcdTAwMGWgclx1MDAwNEG55JoznWDSOKg5tVbmSYUme7ZAVWlcdTAwMWOq0CSRTFNU2oZngZIjXHUwMDEyRDE2PVE8lJQwLouDsno7bEcop1x1MDAwNavKd5pdXHUwMDA0mGOvXHUwMDFkPUnme1x1MDAwNuyMfZqgUypGNFdqauH+XGZO7rl+Nzg5NmsnvTbet72DRqdebjiZkWjAXHUwMDEyzoCCNkTOjHBcZieTjlBMXHUwMDAzXHUwMDEwoPPsLlx1MDAxYU5qNTdcYqOkmO3FK5lcZpgjjWaMoY5cdTAwMDTGp/A+g0qZ4JRovVx1MDAwMO35XCJDUyliz0f+/kWlyjXls1L9XHUwMDEzfn9N01CZavxRnF45MTOz2M+E+YJVtvd6XHUwMDFi9SDc6bP7XHUwMDFiry731EG5hZmDdjiVhlx1MDAxMMm4laM5WcYp1CF4M7hEplx1MDAxOWc5+mRSONxaf5JyxSXJpmhQsvFcdTAwMGJQskxFU7D1XHUwMDE34lx1MDAxYi6iYrVMss1cXG0/lWr7XHUwMDE5rVx1MDAwNUFfZDpb/VxmyEvw7sXe4Jz5a53T7bWd4+bpt2rZgTRcdTAwMGVR0igwiFx1MDAwMoh5y49p5eB0LfTThJ4nkFx1MDAxY1tCIJEudIJcdJ2ZXHUwMDE5flx1MDAwMKRRXHUwMDE0XHUwMDE1XHUwMDFlXHUwMDExn1xiyGptt1Kw0TfXYp4wQrojhppcdTAwMTOlgkmS3da79c+3T7/deGehezgx/oNuNk7aZadROZRcdTAwMDJV3GilXGaY6bd9iE9Lx9p4Ulx1MDAxMzpcdTAwMWZIXFy4ejRcdTAwMGWz6pGQZNT0R35cdTAwMThan6BmTcP/eVx1MDAxYbujICxaPSbbzN9cdTAwMDObseRcdTAwMTNYcvS8JZU8e1xuYbN51YAz/4ZcdTAwMWPIVVVbPdo9OPWPyk2lYNphXHUwMDEy3S8qNMxFXG6fXHUwMDFjMO7kbKyCQMdcbptgmqmEXHUwMDBi+Fx1MDAwMeeLXHUwMDE4KZWcXHUwMDBlQYl8r1x1MDAwZjL766LMgaWJstSSXHSiRHZzr8rqtU69v3t3XHUwMDFkPfaCo6Bhblx1MDAxZZvlXHUwMDE2ZcrAYZxygz6YXHUwMDAxOpv1epJlg1xuXHUwMDA2QKOca0JUfrGEhYg0J1xmXGLSuVx1MDAwMIWzaJlcdTAwMDYh6Mys+F/KdH8uXHUwMDE2Plx1MDAxYk8waeJMXHUwMDE1XHUwMDBlrJ7NVPxMnFu9cVOs93tcdTAwMDd7l9/XL6reerSzdbtQce644aW32KmZc1x1MDAwN1xi1Vx1MDAxNFx1MDAxNEexJvPxXHUwMDA0MHhcdTAwMTaFXHUwMDFjPYSc7SVUkVx1MDAwZcPJVdg51sxlk1/FmeBcdTAwMTWEMWJcdTAwMDNcYomE87M3g56WsZKehzhDsVP0zEi742jdXHUwMDFmdvxhL/lcdTAwMTZv2Ek503fDaCNcdTAwMThcZvxcYrtxXHUwMDEw+MMoeUX8uWvjcTC59Nw3Y4GfnHpuZD9uWklhf6b/+zpcdTAwMTWw+MXr///917tXp9/4+O3JWz79uC+z/36UeyCpcUSNroNgTGS3yGpez1x1MDAxZDS6QbP5KEhrvHdy1253Ss89c4RcdTAwMTZcXFP8Q4WY95NcdTAwMTgqXHUwMDE3Slx1MDAxNbHxcpxcdTAwMDE1yETPSlx1MDAwNr5cdTAwMTBMUWbysc3+gP9cdTAwMWKCn1x1MDAxYa5kkDz6XHUwMDFhruRacSM/oPBxnI93Nnqi4tdIdZ9872yR0WKLR3JcdTAwMDBf2FxiXHRDw4ZwtFL1fDlcdTAwMTejtrZE4pBLXHUwMDFj+9n08cJcdTAwMDMk3NFcbk1oLbSer2L5UbhSXHUwMDEya4uIXHUwMDA1KPjfJUCyftvteuNiXHUwMDAzJMk281xmWc7k/N+Ujlx1MDAxMCY0cJZcdTAwMWRIXHSrstbYPj3fXHUwMDBljq52705ujFx1MDAwN+VcdTAwMDdSO+g2g8FcdFx1MDAwZnVuopxcdTAwMGJcdTAwMGY6VHKDYlx1MDAwZjlcdTAwMDdJ0LMlwlx1MDAxOKlcYo/zXHUwMDA373mUb5FE+4Ggd0D5J2Ky6vdcdTAwMGIu55pvcUn5PLRcdTAwMTRcdTAwMTn/UKySblfag5v1wWZ7KPotOI72Jnq15DxKXHUwMDA1SFx1MDAxY4CkRsb1XCLzPFx1MDAxMuNcdTAwMTD8g/JOpJz1l1x1MDAxN42joKiJjVHojWhmNM+UYFx1MDAwN41dXHUwMDEy1CxcdTAwMWRGOSusucK439zdLVx1MDAxNsb5XHUwMDE2c4XRpCZcdTAwMGWoQP0ogc7E7n5GY8W9XHUwMDFl6XZzu8ru9HC3ofzhTUeUnUZcdI5A2iSlmspkfIrbukt02DlIkGY2y7bw0i2iXHUwMDFknFx1MDAxMVxmN4yTOImRXHUwMDA1R9Tq+Fx1MDAxNvaJaDyqVHYuNpqNYol822quVMp0KjVXxqqH7Dbrduf04nCtUTmPTlx1MDAxZo5cdTAwMWHXnebJ5qj7XHUwMDFiUEmUZGhcdTAwMTFcdTAwMThNuJy3WTmnjpaGXHSOXHUwMDEyOHd28VSamMpcdTAwMTcms5msQInkmjHy2bg8qlx1MDAxYy+By7lWXHUwMDE3wWVaUJfTdC45XHUwMDE3lHCisi9D2IPo6m5393hUv7sle/Kw0ur6o5JzaaO6Slx1MDAwMeVcdTAwMDI0ZVwiWf2Clq2OXHUwMDBi7Ymw2pIlOlayoC4qfULtyoBcXKqdXHUwMDE3XHUwMDEw1f0lev9EdXOI6uI9SdfIQtpi6Vx1MDAwZqxcdPx21drx/HG/NYmY2d5xa3xLXHUwMDFklpx8KanDNOpa/CWcm/lcdTAwMTJcdTAwMWImiSNQXHUwMDFmI0tojeZcdTAwMTnWZcZBXHUwMDBiKDZcbt6l/lx1MDAxZG1sS/GY4nRcdTAwMDFFXGK/izau1KvFKuK5XHUwMDA287SNeWp5XHUwMDEwR/1cdTAwMGLsI4vlt0bh4dGje+zX9FxybO7fbVUnarv0XHUwMDFjoo4lYJehXHUwMDEwMZdAeSlcdTAwMDeXQjAjXHUwMDA0yXdxLlx1MDAwNXC4satzXHUwMDE1kXayzZZfUahwQXwmw7haP6jsX+ytnVx1MDAxNlx1MDAxY9B92+xysixoXHUwMDBlXG4rjjo7l1x1MDAxN/eDyff94KF+eLk2gtONSS1an5ScS5v21MC0Zmj7vo0jaemARJuFoNuaq36U2kEqXHLTJl4nnE1FSsW0tKu+Plx1MDAwZpZH0dhzXHUwMDA3XHUwMDA1e6uJNvNcdTAwMDRSpac9NeNaSchur571qoOzb2H/8Pyuvfl91Fx1MDAxY4mu2Sk5j1x1MDAxMi1SLpRcdTAwMTZcdTAwMDJgfvngXHUwMDEzj8yxVVgvVbT5xXW5wvtqbOlHclx1MDAxM5tcdTAwMWblPONcdTAwMDSpIZ/JZFxyI/RLi+Ux0WSue8qkLytGbUDt0r3s+vHwW+NgPI521d3R1fqw406aXHUwMDE3j4tdoZGP/4hzXHUwMDBloPP4TkRXXHUwMDAwc1x1MDAxNNeGUa3nV1x1MDAxZC9cXD9cIo+2LFxiRVx1MDAxY1x1MDAxZNaMq1x1MDAxOFx1MDAwMTRcdTAwMTdcdTAwMTSm0a7PQGNwW/Sq4kSbuarHVDeSXHUwMDAyyqdcdTAwMDQps+c9m9iZ7sgje+rse+W65z3Wm75bclx1MDAxZVx1MDAxNVC7kERK87SUP6FcdTAwMWaNcIik3NjoqFx1MDAwMZpfhsVOXHUwMDBiyCOLc69cdTAwMTkrglx1MDAwMKdcdTAwMGJj5FwiyvB/I1x1MDAxZb1xwVV6yTZzTXmSdFx1MDAwN1x1MDAxMijReMdldlx1MDAwNdlcIjdcdTAwMGbbJFCtYXiwWz2rbJ7vXHUwMDBmXHUwMDA2JVx1MDAwN5JcbnBcdTAwMTSzXHUwMDAxLCZcdTAwMTRcdTAwMDdUhHNEMluJIHnSqStJjVx1MDAxZeFcdTAwMDQ9Xy6XSWTRXHUwMDFiPP1cdTAwMGbU6KWuXmGpNXqcojqQs7j+XGbGxs54tdG+XHUwMDBlSbjvXHUwMDFksyti1rdaZfdcdTAwMWUp445GZ40jbsBZwlpcdTAwMDVjXHUwMDFjrbjdXHUwMDAzgCsmWX7acSF5TnRvpcL5pISLV36d2T9pzlx1MDAxY9KcPNVLXHUwMDA1YqhcIkR/oDa3tbd3oI89esuuqt6qt0lcdTAwMDfRVqXk3NuNXHUwMDE0qd1cdTAwMDL47V5tL0pcdTAwMTgnP05cdTAwMTB+okiO5YCCOFx1MDAwNm3ceMVsNlx1MDAxZKyktFth0qWqYPRcdTAwMTRmVEfue3tcdTAwMDQjr+CQUaLJXFwznanbglODXHUwMDEzXHUwMDAzWsXkXHUwMDAzMN43m53BNefi5PIybN2tnzTbi91cdTAwMTd88TBa2oStvNP0va3oqHRcdTAwMThcdTAwMGWBXCLa5GtcdTAwMTPbzI5NqYCWXHUwMDE0/2QsXHUwMDAylNhB7NxStzxcdTAwMDXCZYE4tvtBWLBNnGwz11x1MDAxY2d69Z/SqFx1MDAxOTlajJmBPNvkXHUwMDE3q2jRX17vhZ1g7Wy14j3sllx1MDAxY0gqLJBGoHKULDYp54jkVDtcdTAwMDBGcq5cdTAwMTReluPSXHUwMDE1XHUwMDEwXHUwMDBl+iEmNiAzO6laUYrdXmrUiDFQpjhcImv1YmmcbS/f/cBTw7doK3OQXFxlV43B6KAq1OZp1fjuhS9b472zsOzRW1x1MDAwMOkghmjycUIsavPlePaRXHUwMDFhIFx1MDAxNOFGJGpzXHUwMDE2rlx1MDAxYplDrW5cdTAwMTSGJtZz/zC9aVx1MDAxN5yBgmXWXHUwMDFisLiAqjBcdTAwMTRHY/RcdTAwMGW7xeKYbDPfXHUwMDAwbvpGR1xcXHUwMDFi61RB9jUrj8duo6VP2mdcdTAwMWS9dlxcq0eTcfew7GtWwG6GxY3dPtvuN5DcuYtLPG0r543dXHUwMDAyXCLXnZPBecraZKw20Ephf9VcIjbp+mVcdTAwMWGBS8k/srv3f2mqLlx1MDAwM8c3jea7zDrVWlx1MDAxNUJqXHUwMDA1SmVcdTAwMGbhnm7Vgl5EuMvZyeOoWVx1MDAwMc4nZd94jFx1MDAxMeloolx0ZTj5zG1X/KQhmYO+oyT6+Tk2eWpIu0hT4IjHRnHGjIq9nijs4lJVJFx1MDAxYVJcdTAwMDXuZN52h1x1MDAwNSOZaDJXIGnqxkCK26WMXHUwMDFmKJCdfDttXVQ2zMbJpiSNifdwXHUwMDA0O2HpeeSoloRcdTAwMTFcXCRcdTAwMDM2T+qRO4C2uy1tN3P1ejmEc+iHl3Ril1xiZ5ovXHUwMDEzx6J15GTsR0WHc1x1MDAxMm3mmeRkJtWJXHUwMDA0olx1MDAxNFxigr56ZiQ3mmfe5cnB+oa8P29tXYGoNS43So6kzXKi7WetXHUwMDAxQaTQOrGoy6BzR5iQQFx1MDAwMJ0lmef+yVx1MDAwYlnPXHUwMDE5T6LaiFx1MDAxMiY6sd/i17zNP4nOXHUwMDFjtudk6fW4RlP7eJuP7DJdWz+v1zau2sAm34O6hnbntlF69Fx1MDAwNTqrXFxcdTAwMWHQmiql9PxKbkGYw9D8M4qiP6tEjlx1MDAwNbmL2ZhcdTAwMTfpwi9TRvKBk9mw2Fx1MDAxZvJffpZT4sBSw1RcdTAwMWPVXHUwMDFj+oIye1x1MDAwZecuONurV1x1MDAxZetbO+dcdTAwMTecVDY2tOfrsoPPXHK6xcxoIZJPVX0qxFdcdTAwMGXgiKs35fFcdTAwMGKPUkmH2PWjRj8/3jWLXHUwMDE5blx1MDAwYlxmsHN0qVVcdTAwMGVxXHUwMDFmplx1MDAxZMjbXHUwMDBlr0eXKKjF2uHJNnN9plB6WlUq6zCyXHUwMDBmIFx1MDAxOTCfd2+bk7Nu3Vx1MDAxYtROhtBX4JVcdTAwMWNJkMKx9Vx1MDAxY4zQxCZjT0Rcbsfu0SdcdTAwMTiP58lcdTAwMWNzOTjnXG6Dsq1cdTAwMTkzmdeOgkA/QS93STegXHQzU1x1MDAxZZ777lxuqFx1MDAxZlx1MDAwYq7FTzSZJ4/pXHUwMDFiWFO7XHUwMDEzK/5Adlx1MDAxZdVJ7bJxc+9+617db/TD5mPEZavsPHLlcEElXHUwMDE4XHUwMDE5P/88WYmPXHUwMDFhVGnkVYFcdTAwMTbz1Vx1MDAwN1x1MDAwYidcdTAwMTJ+IbuqJSpTTvRSQ1WSXHUwMDFiU5yK7OJXvy44UjXfZK5Aplx1MDAxNuMzpm1x91x1MDAwN4pyXHUwMDBm94JDtbnx7VDdhtvhfaXfXHUwMDFh7N6VnEdGtWOfe05VcjHa06MkcLip3cHzmcf8aJSoiO1cdTAwMTNp4yfVZM3jXHUwMDEwaZ/IvNRccnOZ9WpcbnzkXrd/XHUwMDFiXlx1MDAxNoxjos1cdTAwMGbx+OXZR11xR6OjXGLHbuUlXGaAN8vvPFx1MDAwZsC0/ZU735us/1h6vjxzbpHy4rjC31/+/n/WPVx1MDAxMFx1MDAwNyJ9 Variables#defineFunctionssize_tFILEfpos_tBufferFileNULLSEEK_CURSEEK_SETEOFFOPEN_MAXStreamstdinstdoutstderrFilefopenfcloseIOprintffprintfscanffwriteOthersErrorfseekfflushstdio.h大致内容[1]

Functions

printf

Demo
/* printout.c -- uses conversion specifiers */
#include <stdio.h>
#define PI 3.141593
int main(void)
{
    int number = 7;
    float pies = 12.75;
    int cost = 7800;

    printf("The %d contestants ate %f berry pies.\n", number,
           pies);
    printf("The value of pi is %f.\n", PI);
    printf("Farewell! thou art too dear for my possessing,\n");
    printf("%c%d\n", '$', 2 * cost);

    return 0;
}

// The 7 contestants ate 12.750000 berry pies.
// The value of pi is 3.141593.
// Farewell! thou art too dear for my possessing,
// $15600
一图胜千言

../../../gitbook/assets/image (31).pngprintf format specifications quick reference[2]

转换说明[3]
转换说明修饰符
*:让程序指定 printf 宽度
/* varwid.c -- uses variable-width output field */
#include <stdio.h>
int main(void)
{
    unsigned width, precision;
    int number = 256;
    double weight = 242.5;

    printf("Enter a field width:\n");
    scanf("%d", &width);
    printf("The number is :%*d:\n", width, number);
    printf("Now enter a width and a precision:\n");
    scanf("%d %d", &width, &precision);
    printf("Weight = %*.*f\n", width, precision, weight);
    printf("Done!\n");

    return 0;
}

// Enter a field width:
// 10
// The number is :       256:
// Now enter a width and a precision:
// 10 3
// Weight =    242.500
// Done!

scanf

{% hint style="warning" %}
scanf() 最不常用,因为他容易卡住。最好用 getchar()或者fgets()吧。

scanf 与 printf 两点不一样
Demo
// input.c -- when to use &
#include <stdio.h>
int main(void)
{
    int age;      // variable
    float assets; // variable
    char pet[30]; // string

    printf("Enter your age, assets, and favorite pet.\n");
    scanf("%d %f", &age, &assets); // use the & here
    scanf("%s", pet);              // no & for char array
    printf("%d $%.2f %s\n", age, assets, pet);

    return 0;
}

// 10 9.9
// a
// 10 $9.90 a
*:让程序跳过某个输入(读取文件有常用)
/* skiptwo.c -- skips over first two integers of input */
#include <stdio.h>
int main(void)
{
    int n;
    
    printf("Please enter three integers:\n");
    scanf("%*d %*d %d", &n);
    printf("The last integer was %d\n", n);
    
    return 0;
}

// Please enter three integers:
// 1 2 3
// The last integer was 3
如果输入里边有空格,scanf 会认为这是两个输入!另外可以指定输入字符串长度
/* scan_str.c -- using scanf() */
#include <stdio.h>
int main(void)
{
    char name1[11], name2[11];
    int count;

    printf("Please enter 2 names.\n");
    count = scanf("%5s %10s", name1, name2);
    printf("I read the %d names %s and %s.\n",
           count, name1, name2);

    return 0;
}

// (base) kimshan@MacBook-Pro output % ./"scan_str"
// Please enter 2 names.
// 123 45
// I read the 2 names 123 and 45.
// (base) kimshan@MacBook-Pro output % ./"scan_str"
// Please enter 2 names.
// 1234567890
// I read the 2 names 12345 and 67890.
// (base) kimshan@MacBook-Pro output % ./"scan_str"
// Please enter 2 names.
// 1234567890 1234567890
// I read the 2 names 12345 and 67890.

getchar, putchar

Demo
/* echo_eof.c -- repeats input to end of file */
#include <stdio.h>
int main(void)
{
    int ch;
    
    while ((ch = getchar()) != EOF)
        putchar(ch);
    
    return 0;
}

gets, puts

{% hint style="danger" %}
不要用gets这个函数

gets 会访问未规定的内存!!不要用这个函数!C99已经废除,不过大多数编译器保留了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char array1[8];
    fflush(stdin);
    gets(array1); // 1234567
    puts(array1); // 1234567
    char array2[8];
    fflush(stdin);
    gets(array2); // 12345678
    puts(array2); // 12345678
    char array3[8];
    fflush(stdin);
    gets(array3); // 123456789
    puts(array3); // 123456789
    return 0;
}

// (base) kimshan@MacBook-Pro output % ./"a"
// warning: this program uses gets(), which is unsafe.
// 1234567
// 1234567
// 12345678
// 12345678
// 123456789
// 123456789
// (base) kimshan@MacBook-Pro output
puts看到空字符才会结束。下面的例子打印不是字符串的东西,会出 bug
/* nono.c -- no! */
#include <stdio.h>
int main(void)
{
    char side_a[] = "Side A";
    char dont[] = {'W', 'O', 'W', '!'};
    char side_b[] = "Side B";

    puts(dont); /* dont is not a string */
    // WOW!Side A

    return 0;
}

fgets, fputs

fgets 会留出\0的位置,超出范围的长度会被截断;fputs 不会自动换行
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char array1[8];
    fflush(stdin);
    fgets(array1, sizeof(array1), stdin); // 1234567
    fputs(array1, stdout); // 1234567
    char array2[8];
    fflush(stdin);
    fgets(array2, sizeof(array2), stdin); // 12345678
    fputs(array2, stdout); // 1234567
    char array3[8];
    fflush(stdin);
    fgets(array3, sizeof(array3), stdin); // 123456789
    fputs(array3, stdout); // 1234567
    return 0;
}

// (base) kimshan@MacBook-Pro output % ./"a"
// 1234567
// 123456712345678
// 1234567123456789
// 1234567%
// (base) kimshan@MacBook-Pro output %

gets_s

{% hint style="danger" %}
很多编译器不支持这个 C11 的新函数!

你是否觉得 fgets 还要用 sizeof 有点麻烦,那就用gets_s吧。但是它没有fgets灵活
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char array1[8];
    fflush(stdin);
    gets_s(array1, 8);
    puts(array1);
    char array2[8];
    fflush(stdin);
    gets_s(array2, 8);
    puts(array2);
    char array3[8];
    fflush(stdin);
    gets_s(array3, 8);
    puts(array3);
    return 0;
}
我们写一个自己的 s_gets
char * s_gets(char * st, int n)
{
    char * ret_val;
    int i = 0;
    
    ret_val = fgets(st, n, stdin);
    if (ret_val)
    {
        while (st[i] != '\n' && st[i] != '\0')
            i++;
        if (st[i] == '\n')
            st[i] = '\0';
        else // must have words[i] == '\0'
            while (getchar() != '\n')
                continue;
    }
    return ret_val;
}

sprintf

进行字符串格式化,形成一个字符串保存到某个变量中
/* format.c -- format a string */
#include <stdio.h>
#define MAX 20
char *s_gets(char *st, int n);

int main(void)
{
    char first[MAX];
    char last[MAX];
    char formal[2 * MAX + 10];
    double prize;

    puts("Enter your first name:");
    s_gets(first, MAX);
    puts("Enter your last name:");
    s_gets(last, MAX);
    puts("Enter your prize money:");
    scanf("%lf", &prize);
    sprintf(formal, "%s, %-19s: $%6.2f\n", last, first, prize);
    puts(formal);

    return 0;
}

char *s_gets(char *st, int n)
{
    char *ret_val;
    int i = 0;

    ret_val = fgets(st, n, stdin);
    if (ret_val)
    {
        while (st[i] != '\n' && st[i] != '\0')
            i++;
        if (st[i] == '\n')
            st[i] = '\0';
        else // must have words[i] == '\0'
            while (getchar() != '\n')
                continue;
    }
    return ret_val;
}

// (base) kimshan@MacBook-Pro output % ./"format"
// Enter your first name:
// Charles
// Enter your last name:
// Shan
// Enter your prize money:
// 1000000
// Shan, Charles            : $1000000.00

Reference

[1] https://www.runoob.com/cprogramming/c-function-fflush.html

[2] https://www.pixelbeat.org/programming/gcc/format_specs.html

[3] https://www.gnu.org/software/libc/manual/html_node/Table-of-Output-Conversions.html