试图弄明白如何打印问号:
用户输入:“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;
}
答案 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]);