这题的话,我们读入的时候,可以用scanf单个读入字符,也可以用getchar函数来读入。

scanf

scanf读入串字符的时候,遇到空格、回车和TAB等空白字符就会停止读入,但是如果读入单个字符就不会出现读入结束的情况,因为,我们就是用scanf函数来读入单个字符的,读入结果很理想。

getchar

如果是getchar的话,getchar本身就是读入字符,所以遇到回车和空格并没有什么问题。

注意

  1. 操作可以是多行的,所以注意对换行的处理
  2. 操作字符串里面读入至零之后,后面的回车要用getchar吸收,不然就作为下一组的第一个数据被读入了
  3. 对于操作我们一定要把所有的都读完,不能因为越界,就输出,然后中断读入,我们可以设置标记为否,然后一直读入,读完不做操作就行了
  4. getchar的速度快于scanf的速度
  5. PE问题,每个谜题的输入之间要有一个空行,第一行之前不要

getchar()版

#include <stdio.h>
char puzz[7][7];
int main()
{
int br,bc,er,ec,flag,cnt=1;
char ch;
while ((puzz[0][0]=getchar())!=EOF&&puzz[0][0]!='Z') {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
if (i||j) puzz[i][j]=getchar();
if (puzz[i][j]==' ') {
br=i;er=i;
bc=j;ec=j;
}
}
}
flag=1;
while ((ch=getchar())!=EOF&&ch!='0') {
if (ch=='\n') continue;
if (flag==1) {
switch (ch) {
case 'A':
er--;
break;
case 'B':
er++;
break;
case 'L':
ec--;
break;
case 'R':
ec++;
break;
default:
flag=0;
break;
}
if (flag==0||er<0||er>4||ec<0||ec>4) {
flag=0;
continue;
}
puzz[br][bc]=puzz[er][ec];
puzz[er][ec]=' ';
br=er;
bc=ec;
}
}
getchar();
if (cnt!=1) {
printf("\n");
}
printf("Puzzle #%d:\n",cnt++);
if (flag==1) {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
printf("%c",puzz[i][j]);
if (j<4) printf(" ");
}
}
}
else printf("This puzzle has no final configuration.\n");
}
return 0;
}

scanf()版

#include <stdio.h>
char puzz[7][7];
int main()
{
int br,bc,er,ec,flag,cnt=1;
char ch;
while (scanf("%c",&puzz[0][0])&&puzz[0][0]!='Z') {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
if (i||j) scanf("%c",&puzz[i][j]);
if (puzz[i][j]==' ') {
br=i;er=i;
bc=j;ec=j;
}
}
}
// for (int i=0;i<5;i++) {
// for (int j=0;j<6;j++) {
// printf("%c",puzz[i][j]);
// }
// }
flag=1;
while (scanf("%c",&ch)&&ch!='0') {
if (ch=='\n') continue;
if (flag==1) {
switch (ch) {
case 'A':
er--;
break;
case 'B':
er++;
break;
case 'L':
ec--;
break;
case 'R':
ec++;
break;
default:
flag=0;
break;
}
if (flag==0||er<0||er>4||ec<0||ec>4) {
flag=0;
continue;
}
puzz[br][bc]=puzz[er][ec];
puzz[er][ec]=' ';
br=er;
bc=ec;
}
}
getchar();
if (cnt!=1) {
printf("\n");
}
printf("Puzzle #%d:\n",cnt++);
if (flag==1) {
for (int i=0;i<5;i++) {
for (int j=0;j<6;j++) {
printf("%c",puzz[i][j]);
if (j<4) printf(" ");
}
}
}
else printf("This puzzle has no final configuration.\n");
}
return 0;
}

最新文章

  1. 动态添加LinearLayout的高度
  2. 关于ORACLE中配置文件的问题
  3. 转-Asp.Net MVC及Web API框架配置会碰到的几个问题及解决方案
  4. Centos 6.4 32位 gcc 升级(已验证)
  5. (一)Qt界面设计布局
  6. Eclipse开发Python项目
  7. JavaScript面向对象编程(二)构造函数和类
  8. mybatis学习笔记四(动态sql)
  9. WGCNA算法研究笔记
  10. sudoku--设想
  11. [mysql使用(2)] mysql的一些语法与Oracle的差别
  12. java中抽象类和接口之间的异同点
  13. CentOS 7 安装samba服务
  14. Zabbix调优不完全指南(https://www.jianshu.com/p/2d911d55448f)
  15. C# -- 使用Aspose.Cells创建和读取Excel文件
  16. #6279. 数列分块入门 3(询问区间内小于某个值 xx 的前驱(比其小的最大元素))
  17. (钉钉)第三方WEB网站扫码登录
  18. linux 程序实现后台运行
  19. noip第21课作业
  20. windows 64bit 服务器下安装32位oracle database 11g 问题集

热门文章

  1. jvm 调优(转)
  2. log4j和log4j2怎么动态加载配置文件
  3. POP页面暂时不销毁
  4. GYM 101889E(dp)
  5. DB2 函数
  6. python学习之图形界面编程:
  7. csu 1552: Friends 二分图 + Miller_Rabin
  8. vue 引用其他组件
  9. Linux 安装gcc4.8版本
  10. 解决win64无法添加curl扩展的问题