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)…
,lookupstrlen
printf(%s),words[i]);-->printf(%c),words[i]);
scanf而(iscanf(%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