如何在C中定义长度的数组末尾添加char

时间:2015-02-01 02:51:36

标签: c arrays

我有一个C赋值,我们使用长度为10的数组来存储字符。教授指出我们不能使用null来指定数组的结尾。数组是保存一个名字,我们从标准输入读取。当名称大于10个字符时,我们打印出来的时间太长了。这是我的代码到目前为止,它不起作用,因为当我按Enter键提交名称时,它使用它作为一个字符,我必须在发生任何事情之前达到10,这导致它说它的名字太长了,这不是理想的结果。

int main( void )
{
  printf( "What's your name: " );

  // Storage for a name, as an array of characters without a null
  // marking the end.
  char name[ 10 ];
  int len = 0;

  char ch = getchar();
  while((ch != EOF) || (ch != '\n')) {
    name[10] = name[10] + ch;
    ch = getchar();
    len++;
    if(len > 10) {
      printf("That name is too long.");
    }
  }

  printf("Hello ");
  for(int i = 0; i < len; i++) {
    printf("%c", name[i]);
  }

  printf(".\n");

  return 0;
}

2 个答案:

答案 0 :(得分:4)

尽管名称如此,getchar仍会返回int,而不是字符。 EOF的值通常无法在unsigned chargetchar可以返回的唯一字符值类型)中表示。类型unsigned char的值不能等于EOF

另请仔细查看while循环的状况。它总是正确的,所以即使将getchar的结果存储在char以外的其他内容中,也会有无限循环。

name[10] = name[10] + ch也没有达到预期的效果。

答案 1 :(得分:-1)

我认为这是你的目标:

int main( void )
{
    // Storage for a name, as an array of characters without a null marking the end.
    char name[ 10 ];
    int len = 0;
    printf( "What's your name: " );

    ch = getchar();
    while((ch != EOF) || (ch != '\n'))
    {
        name[len] = ch;
        len++;
        if(len > 10) {
            printf("That name is too long.");
        }
        ch = getchar();
    }

    name[len]='\0';

    printf("Hello ");
    for(int i = 0; i < len; i++) {
        printf("%c", name[i]);
    }

    printf(".\n");

    return 0;
}

此处name[len]='\0';用于终止您的char数组。