我正在尝试使用while
循环作为字符数组来获取用户的输入(此数组的最大长度为255个字符)。这是我到目前为止所做的,但输入数据后按Enter键没有任何反应。
#include <stdio.h>
int main()
{
char inputString[255];
printf("Enter a line of text up to 255 characters\n");
int i = 0;
while(i <= 255) {
scanf(" %c", inputString);
i++;
}
// Display Reversed String
int x;
for(x = 255; x >= 0; --x) {
printf("%c", inputString[x]);
}
return 0;
}
我是C的新手,并且不了解我的代码有什么问题。
先谢谢。
例如:&#34; Hello World!
&#34;应打印&#34; !dlroW olleH
&#34;
答案 0 :(得分:1)
除了两件事之外你几乎得到了它
c中的索引从0
转到N - 1
,因此不是
int i = 0;
while(i <= 255) {
应该是
for (int i = 0 ; i < sizeof(inputString) ; ++i) {
你可以看到循环从i == 0
到i == 254
或i < 255
而不是i <= 255
。反向循环也是如此,它应该从sizeof(inputString) - 1
或254
开始。
小心使用sizeof
运算符。
您必须将地址传递给下一个字符。
scanf(" %c", &inputString[i]);
更好的方法是
int next;
next = 0;
for (int i = 0 ; ((i < sizeof(inputString) - 1) && ((next = getchar()) != EOF)) ; ++i)
inputString[i] = next;
答案 1 :(得分:0)
这接受任意长度的输入。
#include <stdio.h>
#include <stdlib.h>
typedef struct ll {
struct ll *next, *prev;
char c;
} ll_t;
ll_t *
newll() {
ll_t *rv;
if ((rv = calloc(sizeof (ll_t), 1)) != NULL)
return rv;
fprintf(stderr, "out of memory, fatal\n");
exit(-1);
}
int
main()
{
ll_t *llp = newll();
printf("Enter text to put in reverse order: ");
while((llp->c = getchar()) != EOF) {
if (llp->c == '\n')
break;
llp->next = newll();
llp->next->prev = llp;
llp = llp->next;
}
for( ; llp != NULL; llp = llp->prev)
putchar(llp->c);
putchar('\n');
}