2 thetrmite thetrmite 于 2015.08.23 18:14 提问

输入一个错位敲出的字符串,输出打字员本来想打出的句子

#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该如何理解呢?

6个回答

caozhy
caozhy   Ds   Rxr 2015.08.23 18:42
已采纳

另外你的换行、缩进以及while循环中把判断和赋值写在一起,这些都要注意。

thetrmite
thetrmite 感谢您的耐心回答,终于懂了
大约 2 年之前 回复
CSDNXIAOD
CSDNXIAOD   2015.08.23 18:16

输入一个字符串,打印出其中所有的数字
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

caozhy
caozhy   Ds   Rxr 2015.08.23 18:22
 s[i] && s[i] != c
其实是
s[i] != '\0' && s[i] != c
这种程序写法不值得你学习模仿。
caozhy
caozhy   Ds   Rxr 2015.08.23 18:25

在C里,'\0'表示字符串结束
这里用while循环更好
推荐这么写

原写法
for(i = 1; s[i] && s[i] != c; i ++);
应该写

 i = 1;
while (s[i] != '\0')
{
    if (s[i] == c)
            break;
    i++;
}

写程序绝对不是卖弄技巧和越短越好。

u010284226
u010284226   2015.09.13 14:25
        for(i=1;s[i]!='\0';i++){
            if(s[i]==c) break;
        }

这个程序就是每次输入一字符,然后在指定的字符串内找到这个字符的位置,然后输出这个这个字符的前面的 字符
所以相输出123456789 QWERTYUIOP[]\ASDFGHJKL ZXCVBNM
可以在键盘先后输入:
234567890- 回车
WERTYUIOP[ -回车
SDFGHJKL;回车
XCVBNM,回车

u010284226
u010284226   2015.09.13 14:26
        for(i=1;s[i]!='\0';i++){
            if(s[i]==c) break;
        }

这个程序就是每次输入一字符,然后在指定的字符串内找到这个字符的位置,然后输出这个这个字符的前面的 字符
所以相输出123456789 QWERTYUIOP[]\ASDFGHJKL ZXCVBNM
可以在键盘先后输入:
234567890- 回车
WERTYUIOP[ -回车
SDFGHJKL;回车
XCVBNM,回车

Csdn user default icon
上传中...
上传图片
插入图片