循环后打印问号

时间:2016-06-23 01:33:40

标签: c arrays loops

试图弄明白如何打印问号:
用户输入:“apple”然后字符串存储在一个数组中,并按如下方式打印:“apple?”
这是我的代码:

#include<stdio.h>
int main()
{
    char a[23];
    int i=0;
    printf("enter a single english word: ");
    while( (a[i++]=getchar()) != '\n' && i < 23){
        a[i] = '\0';
        i = 0;
    }
    while(a[i] != '\0'){
       printf("%c",a[i++]);
    }  
    printf("?");
    return 0;
}

4 个答案:

答案 0 :(得分:2)

您在每个字符阅读后重置i。这有效地使您擦除存储的内容。你需要将i = 0;从第一个while循环内移到它之后。

答案 1 :(得分:2)

第一个while循环中的代码应该在循环完成后完成。您可以在while()标题中完成循环的所有工作。循环体每次都将i重置为0,因此您反复覆盖a的第一个字符。

while( (a[i++]=getchar()) != '\n' && i < 23){
}
a[i] = '\0';
i = 0;

答案 2 :(得分:1)

首先,您的输入循环不正确。它应该是这样的:

while( (a[i++]=getchar()) != '\n' && i < 23) {}
a[i] = '\0';

正如上面提到的问题的评论所示,您在读取每个字符后重置指针索引,因此每次都读取数组的字符0。你应该在循环之后这样做。

另外,因为a只是一个字符串,你应该能够像这样打印它(没有循环):

printf("%s?", a);

最终计划:

#include<stdio.h>
int main()
{
    char a[23];
    int i=0;
    printf("enter a single english word: ");
    while( (a[i++]=getchar()) != '\n' && i < 23) {}
    a[i] = '\0';
    printf("%s?",a);
    return 0;
}

答案 3 :(得分:1)

以下逻辑有效:

 vagrant plugin install vagrant-vbguest

将输入扫描到数组中:

char a[23];
int i=0,j=0;
printf("enter a single english word: ");

最后打印:

for(a[i]=getchar(); (a[i]!='\n') && (i<23) ; i++)
        ;

因此该计划:

for(j=0;j<i;j++)
        putchar(a[j]);