C 最后一个字母输入+;1由于某种原因

C 最后一个字母输入+;1由于某种原因,c,arrays,for-loop,char,scanf,C,Arrays,For Loop,Char,Scanf,我正在做一个练习,打印3封来自用户的信。前两个字母的结果很好,但最后一个字母总是用户出于某种原因输入的字母之后的字母(我尝试了几种不同的输入组合,结果总是相同的): #包括 int main(){ char userChar[3]; int i; 对于(i=1;i我将把这篇文章作为一个回答,只是为了澄清修正案 #include <stdio.h> int main(){ char userChar[3]; int i; for (i = 0; i <

我正在做一个练习,打印3封来自用户的信。前两个字母的结果很好,但最后一个字母总是用户出于某种原因输入的字母之后的字母(我尝试了几种不同的输入组合,结果总是相同的):

#包括
int main(){
char userChar[3];
int i;

对于(i=1;i我将把这篇文章作为一个回答,只是为了澄清修正案

#include <stdio.h>

int main(){

    char userChar[3];
    int i;

    for (i = 0; i < 3; i++){                                    // the loop range
        printf("Enter letter %d\n", i + 1);                     // for human use
        scanf(" %c", &userChar[i]);
    }
    printf("%c %c %c", userChar[0], userChar[1], userChar[2]);  // the array indexing

    return 0;
}

C中的数组是基于
0
的。也就是说,第一个元素是
userChar[0]
,最后一个元素是
userChar[2]
。因此
userChar[3]
打破了数组的界限,结果可能是任何东西——从错误答案到崩溃。
for(I=0;I<3;I++)
,然后是
userChar 0],userChar[1],userChar[2]
Re更新:您将数组长度从
char-userChar[3];
更改为
char-userChar[2]
嗯,我怀疑是这样的…索引是以零为基础的,但不是长度。保持它
3
。非常好,谢谢!当我将数组大小从2更改为3时,它起了作用,这只是在数组中留下额外空间的一般经验法则吗?这不是额外的!当你定义
char userChar[3]
这是一个由三个元素组成的数组。不要将大小与索引混淆。三个元素组成的数组通过
0
2
进行索引。
#include <stdio.h>

int main(){

    char userChar[3];
    int i;

    for (i = 0; i < 3; i++){                                    // the loop range
        printf("Enter letter %d\n", i + 1);                     // for human use
        scanf(" %c", &userChar[i]);
    }
    printf("%c %c %c", userChar[0], userChar[1], userChar[2]);  // the array indexing

    return 0;
}
Enter letter 1
a
Enter letter 2
b
Enter letter 3
c
a b c