问题:输入一个错位后的字符串,输出打字员本来想打出的句子。(将输入的字母在键盘上左移一位)

问题:输入一个错位后的字符串,输出打字员本来想打出的句子。(将输入的字母在键盘上左移一位)

问题描述:

#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]);
}
}
return 0;
}

问题是
如果我输入一个Q,这里的if循环中的i为什么从1直接跳到12的位置
为什么不是i=1,s[1]=2,输出s[0]=1,然后再i+1么。。不懂了

 #include <stdio.h>
#include <stdlib.h>
char *s = "1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";
int main()
{
    int i, c;
    while ((c = getchar()) != EOF)
    {
        fflush(stdin);//清除缓冲区
        for (i = 1; s[i] && s[i] != c; i++)//删掉分号
        {
            if (s[i])
                putchar(s[i - 1]);
        }
    }
    return 0;
}

        for (i = 1; s[i] && s[i] != c; i++)//删掉分号

结合你的题修改:

 #include <stdio.h>
#include <stdlib.h>
char *s = "1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//修改用转义字符
int main()
{
    int i, c;
    while ((c = getchar()) != EOF)//ctrl+z退出
    {
        fflush(stdin);//清除缓冲区
        for (i = 0; s[i] && s[i] != c; i++);

        putchar(s[i-1]);
        putchar('\n');
    }
    return 0;
}

完善:

 #include <stdio.h>
#include <stdlib.h>
char *s = "1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//修改用转义字符
int main()
{
    int i, c;
    while ((c = getchar()) != EOF)//ctrl+z退出
    {
        for (i = 0; s[i] && s[i] != c; i++);
        if(s[i] && i>0) putchar(s[i-1]);
        else putchar('\n');
    }
    return 0;
}

 for 循环语法:
 for(表达式1;表达式2;表达式3)
 语句

 执行过程:
 1、执行表达式1
 2、判断表达式2的结果,如果为假退出循环体,如果为真执行循环体
 3、循环体可以是一条语句或复合语句,或空语句
 4、执行表达式3
 5、返回到第2步执行。