我现在在C中学习数组。我遇到的问题是,如果我给数组赋予值,例如
char message[100], ch;
但是如果我不使用所有的字符,它会给我一些随意的符号。 实施例
while(toupper(ch = getchar()) != '\n')
{
message[i] = ch;
i++;
}
如果我要输入50个字符,请按Enter键,然后使用以下字符打印:
for(i = 0; i <= 100 - 1; i++)
printf("%c", message[i]);
它会打印50个符号,然后再打印50个任意符号 在之前的一个问题中,我有人告诉我,我不必在for循环中使用100,而是我用它取代它。
我希望这可以全面了解我的问题,如果不让我知道的话。
答案 0 :(得分:2)
要打印50个字符,您需要确保message
数组中有50个字符,
最简单的方法是使用i
本身。
你必须循环到i
(输入字符的数量&lt; = 100)
int j ;
for( j = 0; j < i; j++)
printf("%c", message[j]);
答案 1 :(得分:2)
另一种方法是添加:
message[i] = '\0';
在while循环之后。这会将终止字节添加到message
。然后当你输出它时,你可以使用:
printf("%s", message);
而不是for
循环。
答案 2 :(得分:0)
在C中,字符串以空字符'\0'
终止。因此,在循环之后,您需要将最后一个字符设置为该字符,然后您应该使用单个%s
(或puts
)进行打印,而不是再次循环遍历字符。
while(toupper(ch = getchar()) != '\n')
{
message[i] = ch;
i++;
}
message[i] = '\0';
...
printf("%s\n", message);
// or
puts(message);
答案 3 :(得分:0)
有两种方法可以解决这个问题。您可以跟踪字符串的长度,也可以使用“sentinel”值,在C中传统上是0字节(不是'0'字符)。
给定这样的函数:
void print_null_terminated_string(char* s)
{
while (*s != 0) {
printf("%c", *s);
++s;
}
}
void print_string_with_known_length(char* s, size_t length)
{
for (size_t i = 0; i < length; ++i) {
printf("%c", s[i]);
}
}
您可以像这样使用它们:
while(toupper(ch = getchar()) != '\n')
{
message[i] = ch;
i++;
}
message[i] = 0; // Add null terminator
print_null_terminated_string(message); // or just printf("%s", message)
或者:
while(toupper(ch = getchar()) != '\n')
{
message[i] = ch;
i++;
}
size_t length = i;
print_string_with_known_length(message, length); // or printf("%.*s", length, message) if you want to be fancy