我有一个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;
}
答案 0 :(得分:4)
尽管名称如此,getchar
仍会返回int
,而不是字符。 EOF
的值通常无法在unsigned char
(getchar
可以返回的唯一字符值类型)中表示。类型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数组。