为什么这段c语言是输出所输入字符的左移动一位

这段程序是正确的,输入一段字符(字母是大写),然后输出键盘上左移动一位的字符。(不是字母表,是键盘)大概思路明白,但对for语句和If-else语句那里的意思不太理解,请... 这段程序是正确的,输入一段字符(字母是大写),然后输出键盘上左移动一位的字符。(不是字母表,是键盘)
大概思路明白,但对for语句和If-else语句那里的意思不太理解,请朋友们帮忙看看,谢谢
#include <stdio.h>
char *s = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";
int main(){
int i,c;
while ((c = getchar()) != EOF) {
for (i=1; s[i] && s[i]!=c; i++);
if (s[i])
putchar(s[i-1]);
else
putchar(c);
}
return 0;
}
展开
 我来答
月下忆娇娘
推荐于2016-10-23 · TA获得超过326个赞
知道小有建树答主
回答量:442
采纳率:100%
帮助的人:351万
展开全部
第一,字符串s 就是键盘上的键, 按顺序排列的。特殊的几个不考虑
第二,while()是你输入一个字符(大写),如果能在s 中找到。输出s[i-1],当然就是左边的那个了。同样。特殊的不考虑。比如输入a。他会输出\. 这个不考虑。
for 循环的判断条件是s[i] 不是'\0', 并且s[i] != c;
也就是说for结束的时候一定是字符串结尾,或者s[i] = c;
然后判断if(s[i])(不是字符串结尾):输出左边的一个字符。
反之(没找到,到字符串结尾 了)输出c 本身。
追问
你好,还是有一些不明白。
1. s[i] = c为什么要让for语句终止
2. “反之(没找到,到字符串结尾 了)输出c 本身。”这时的c是什么,或者说为什么是这样?
谢谢
追答
程序有两种,第一种为了实现一个功能而写,比如这儿为了查找C,写循环。既然s[i] = c 了当然要终止。因为达到 目的了;
第二种,别人的程序,你不需要知道他为什么这么写。他就是为了实现某种功能(他可能是写错了)。
关于你问这时的C是什么。那么我想问你。C一直是什么???C有改变过没?可见你是基本功问题。建议先从基础学。循环可以放后面。
dongkenan007
2014-06-21 · TA获得超过1001个赞
知道小有建树答主
回答量:1468
采纳率:50%
帮助的人:938万
展开全部
for语句是查找 键盘输入的字符在字符串里的位置。
fi-else语句是判断键盘输入的字符是否是字符串里的有效字符
追问
你好,for语句的终止条件
s[i] && s[i]!=c
是什么意思?
谢谢
追答
这句可以改写为更易懂的格式: s[i] && (s[i]!=c),作用是判断输入的字符在"`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"中的位置。
如果字符串中当前位置字符(即s[i])与输入的字符(c)不同,就i++,执行下一次比较。

我觉得这句可以改为 s[i]!=c,前面的s[i] &&没用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式