b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

为什么在使用printf()打印时多个字符串(%S)会留下换行符,以及如何解决此问题?

电脑杂谈  发布时间:2020-03-28 08:06:00  来源:网络整理

printf输出换行_printf输出字符串不加换行符_c语言 printf输出字符

问题

我制作了一个程序,该程序可以接受字符串(名字/姓氏),而不是典型的

输出

3岁的菲尔·斯诺肯(Phil Snowken),我要得到

printf输出换行_printf输出字符串不加换行符_c语言 printf输出字符

菲尔

下雪了

3岁

#include <stdio.h>
#define N 10
struct data{
char fname[30];
char lname[30];
int age;
};
main()
{
    int i;
    struct data base[N];
    for(i=0;i<N;i++){
        printf("\n-------------------------");
        printf("\nPeople Data(%d remaining)\n",N-i);
        printf("---------------------------\n\n");
        printf("\nFirst Name ");
        fgets(base[i].fname,30,stdin);
        printf("\nLast Name ");
        fgets(base[i].lname,30,stdin);
        printf("\nAge ");
        scanf(" %d",&(base[i].age));
        fflush(stdin);
    }
    for(i=0;i<N;i++)
        printf("%s %s Year:(%d)",base[i].fname,base[i].lname,base[i].age);
    return 0;   
}

c语言 printf输出字符_printf输出换行_printf输出字符串不加换行符

解决方案

fgets()使用输入的字符串读取换行符,因此每次按Enter时,\ n也会读入字符串(请参见man fgets)

您必须检查最后一个字符,如果它是\ n,则将其更改为\ 0,如下所示:

size_t length = strlen(base[i].fname);
if (base[i].fname[length-1] == '\n')
    base[i].fname[length-1] = '\0';

printf输出换行_c语言 printf输出字符_printf输出字符串不加换行符

本文解决: IT之家»当打印多个字符串(%S)时,为什么printf()保留换行符,以及如何解决此问题?

问题

我制作了一个程序,该程序可以接受字符串(姓氏/名字),但不接受3岁的Phil Snowken的典型输出,并且得到的结果为Phil结果

下雪了

c语言 printf输出字符_printf输出换行_printf输出字符串不加换行符

结果3岁

 的#include&LT;&stdio.h中GT;
#定义N 10
结构数据{
CHAR FNAME [30];
CHAR LNAME [30];
INT年龄;
};主要()
{
    INT I;
    结构数据基础[N];
    对于(i = 0; I&LT; N;我++){
        的printf(\\ n -------------------------);
        的printf(\\ nPeople数据(还剩%d)\\​​ n,N-1);
        的printf(--------------------------- \\ n \\ n);
        的printf(\\ n第一名称);
        与fgets(基[I] .fname,30,标准输入);
        的printf(\\ n上次名称);
        与fgets(基[I] .lname,30,标准输入);
        的printf(\\ NAGE);
        scanf的(%D,及(基[I]。年龄));
        fflush(标准输入);
    }    对于(i = 0; I&LT; N;我++)
        的printf(%s%S年份:(%D),基地[I] .fname,基地[I] .lname,基地[I]。年龄);
    返回0;
}

解决方案

使用fgets()作为字符串读取换行符,因此,每次输入preSS时printf输出字符串不加换行符,您也会\\ n也读取字符串(请参阅man和fgets)

您需要检查的最后一个字符是否为\\ n,将其更改为\\ 0,如下所示:

 为size_t长度= strlen的(基地[I] .fname);
如果(基[I] .fname [长度1] =='\\ n')
    基地[I] .fname [长度1] ='\\ 0';

本文解决: IT之家»当打印多个字符串(%S)时,为什么printf()保留换行符printf输出字符串不加换行符,以及如何解决此问题?


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-155130-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...