#include
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;
}
for循环里的s[i] && s[i] != c该如何理解呢?
另外你的换行、缩进以及while循环中把判断和赋值写在一起,这些都要注意。
s[i] && s[i] != c
其实是
s[i] != '\0' && s[i] != c
这种程序写法不值得你学习模仿。
在C里,'\0'表示字符串结束
这里用while循环更好
推荐这么写
原写法
for(i = 1; s[i] && s[i] != c; i ++);
应该写
i = 1;
while (s[i] != '\0')
{
if (s[i] == c)
break;
i++;
}
写程序绝对不是卖弄技巧和越短越好。
for(i=1;s[i]!='\0';i++){
if(s[i]==c) break;
}
这个程序就是每次输入一字符,然后在指定的字符串内找到这个字符的位置,然后输出这个这个字符的前面的 字符
所以相输出123456789 QWERTYUIOP[]\ASDFGHJKL ZXCVBNM
可以在键盘先后输入:
234567890- 回车
WERTYUIOP[ -回车
SDFGHJKL;回车
XCVBNM,回车
for(i=1;s[i]!='\0';i++){
if(s[i]==c) break;
}
这个程序就是每次输入一字符,然后在指定的字符串内找到这个字符的位置,然后输出这个这个字符的前面的 字符
所以相输出123456789 QWERTYUIOP[]\ASDFGHJKL ZXCVBNM
可以在键盘先后输入:
234567890- 回车
WERTYUIOP[ -回车
SDFGHJKL;回车
XCVBNM,回车