C 按'L'键睡眠时

C 按'L'键睡眠时,c,string,loops,reverse,C,String,Loops,Reverse,总而言之,你可以做如下事情: #include <stdio.h> #define MAXC 100 /* if you need a constant, define one */ int main(void) { char words[MAXC] = ""; int i = 0, rtn = 0; /* rtn - capture the return of scanf */ printf ("Enter a word/senten

总而言之,你可以做如下事情:

#include <stdio.h>

#define MAXC 100    /* if you need a constant, define one */

int main(void) {

    char words[MAXC] = "";
    int i = 0, rtn = 0;     /* rtn - capture the return of scanf  */

    printf ("Enter a word/sentence : ");
    if ((rtn = scanf ("%99[^\n]", words)) != 1) {   /* validate ! */
        if (rtn == EOF)     /* user cancel? [ctrl+d] or [ctrl+z]? */ 
            fprintf (stderr, "user input canceled.\n");
        else                    /* did an input failure occur ? */
            fprintf (stderr, "error: invalid input - input failure.\n");
        return 1;               /* either way, bail */
    }

    for (; words[i]; i++) {}    /* get the length */

    printf ("Reversed word/sentence: ");
    while (i--)
        putchar (words[i]);     /* no need for printf to output 1-char */
    putchar ('\n');

    return 0;
}

请仔细查看,如果您还有任何问题,请告诉我。

scanf(%s)。
->
scanf(%99s)…
,lookup
strlen
printf(%s),words[i]);-->printf(%c),words[i]);
scanf而(i
scanf(%s)。
scanf;-->printf(“%c”,words[i]);
while(通常,总是验证用户输入。int rtn;
if((rtn=scanf(“%s”,words))!=1){if(rtn==EOF){/*处理用户取消的输入*/};/*处理输入失败*/
然后循环,
for(;words[i];i++};while printf(“%c”,words[i]);
(代码中不需要
stdlib.h
)当
而(i>0)
(没有
=
)将执行此任务时,在循环之前添加
i-;
似乎很奇怪。@chux如果没有i-,我将指向“\0”。正如David C.Rankin所说,而(i-)将执行此任务。始终验证用户输入。int rtn;
如果((rtn=scanf(“%s”,words))!=1{if(rtn==EOF){/*处理用户取消的输入*/};/*处理输入失败*/}
然后循环,
for(;words[i];i++){};while(i--)printf(“%c”,words[i]);
(代码中不需要
stdlib.h
)在
之前添加
i--
,而
while while(i>0)
(如果没有
=
)就可以完成任务。@chux如果没有i-,我将指向“\0”。正如David C.Rankin在(i-)时所说的那样答案再清楚不过了。我只想问一下
单词
的字符串初始化器是否有任何特定的原因?如果您读取的值小于
sizeof(array),您总是希望将数组初始化为全零,这样无论逻辑中有什么错误
chars,您的字符串将始终以nul结尾
:)
很公平,只是对于自动数组(大小足够好),这将非常昂贵。不过,这是一个很好的做法。从效率的角度来看,初始化是便宜的。使用默认初始值设定项,无论是使用
words=”“
还是
words={0}
完成了同样的事情。当您初始化为零时,您只是初始化第一个元素,所有剩余的元素在默认的初始化过程中都变成零——闪电般的快,非常值得0.00472微秒或初始化时间(或现实世界中的任何时间)。“字符串将始终以nul结尾“->也许”。考虑<代码>(RTN=EOF)< /代码>,在输入错误上,<代码>单词< /代码>的内容是不确定的。正如初始化变量是一个有价值的指南(当代码>单词[0 ]=0时,我不会初始化大数组,足够,也许更快100X),检查返回值更为有益。答案再清楚不过了。我只想问一下
单词的字符串初始化器是否有任何特定的原因?如果读取的值小于
sizeof(array),您总是希望将数组初始化为全零,这样不管逻辑中有什么错误
chars,您的字符串将始终以nul结尾
:)
很公平,只是对于自动数组(大小足够好),这将非常昂贵。不过,这是一个很好的做法。从效率的角度来看,初始化是便宜的。使用默认初始值设定项,无论是使用
words=”“
还是
words={0}
实现了同样的功能。当您初始化为零时,您只需初始化第一个元素,所有剩余的元素都会在默认初始化过程中变为零——闪电般的快,非常值得0.00472微秒或初始化时间(或现实世界中的任何时间)。“字符串将始终以nul结尾”-->可能。考虑<代码>(RTN=EOF)< /代码>,在输入错误中,<代码>单词< /代码>的内容是不确定的。正如初始化变量是一个有价值的指南(当代码>Word(0)=0; >足够快,也许快100X)时,我不会初始化大型数组,检查返回值更为有益。
#include <stdio.h>
#include <stdlib.h>

int main() {
    char words[100];
    int i=0;
    printf("Enter a word/sentence: ");
    scanf("%s", words);

    while (words[i]!='\0') {
        ++i;
    }
    i--;
    printf("\nThe Reverse is: ");
    while (i>=0) {
       printf("%c",words[i]);
       i--;
    }
 return 0;
}
#include <stdio.h>

#define MAXC 100    /* if you need a constant, define one */

int main(void) {

    char words[MAXC] = "";
    int i = 0, rtn = 0;     /* rtn - capture the return of scanf  */

    printf ("Enter a word/sentence : ");
    if ((rtn = scanf ("%99[^\n]", words)) != 1) {   /* validate ! */
        if (rtn == EOF)     /* user cancel? [ctrl+d] or [ctrl+z]? */ 
            fprintf (stderr, "user input canceled.\n");
        else                    /* did an input failure occur ? */
            fprintf (stderr, "error: invalid input - input failure.\n");
        return 1;               /* either way, bail */
    }

    for (; words[i]; i++) {}    /* get the length */

    printf ("Reversed word/sentence: ");
    while (i--)
        putchar (words[i]);     /* no need for printf to output 1-char */
    putchar ('\n');

    return 0;
}
$ ./bin/strrevloops
Enter a word/sentence : My dog has fleas.
Reversed word/sentence: .saelf sah god yM