16-8-30问题
来源:互联网 发布:网吧电脑优化 编辑:程序博客网 时间:2024/06/06 18:23
今天学习c的时候遇到了第一个想不通的问题
题目内容:编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应的名和姓的结尾对齐,如下:
Justinbieber
6 6
接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下:
JustinBieber
6 6
刚开始的思路:通过strlen()函数来确定名和姓的字符数,再通过%Xd的形式使输出的字符数来实现左对齐或右对齐,但遇到了一个问题,即strlen()的返回值无法表示在%Xd的形式中。
卡壳原因分析:看书时没有充分注意到书上内容的细节,具体为程序清单4.16 varwid.c程序中,关于%*d的使用。
解题思路:在%*d情况下,后边提供两个变量,第一个提供字段宽度,第二个提供变量内容。
具体代码如下:
#include<stdio.h>
#include<string.h>
Intmain(void)
{
char firstname[10],lastname[10];
int width1,width2;
width1=strlen(firstname);
width2=strlen(lastname);
scanf("%s%s",firstname,lastname);
printf("%s%s\n",firstname,lastname);
printf("%*d%*d\n",width1,width1,width2,width2);
printf("%s%s\n",firstname,lastname);
printf("%-*d%-*d",width1,width1,width2,width2);
return 0;
}
第一次调试后发现strlen读入数值一直为1,再次检查后发现width1=strlen()的函数放在了scanf之前,导致输入之前便被赋值,为粗心错误,第二次犯了,要注意!!!!
更改后:
#include<stdio.h>
#include<string.h>
int main(void)
{
char firstname[10],lastname[10];
int width1,width2;
scanf("%s%s",firstname,lastname);
width1=strlen(firstname);
width2=strlen(lastname);
printf("%s%s\n",firstname,lastname);
printf("%*d%*d\n",width1,width1,width2,width2);
printf("%s%s\n",firstname,lastname);
printf("%-*d%-*d",width1,width1,width2,width2);
return 0;
}
- 16-8-30问题
- 8皇后问题和N皇后问题
- UTF-8编码问题编码长度问题
- 经典问题:MYSQL 8小时问题
- 问题集锦(30-35)
- 2010-12-30问题
- VC++问题集16
- 问题集锦(16-20)
- java基础问题16
- 16个硬币问题
- Nyoj 16 背包问题
- 8皇后问题改进~
- MySQL UTF-8 问题:
- 8皇后问题
- 8个经典问题
- 8数码问题
- 8皇后问题求解
- UTF-8编码问题
- 第十周 输出回文数
- 161107
- jeesite框架CMS中英文站点切换解决方案
- 带头结点的非循环单向链表
- 记录自己的收藏夹
- 16-8-30问题
- iOS实现断点续传
- SuperMap iServer 8C(2017),一大波新特性来袭
- Socket编程基础
- React Native开发环境搭建
- 一个iOS模块化开发解决方案
- 第十周项目二(2)输出10000以内回文数
- schema
- 文件及目录管理