const siZePiPoPoCtCube=5 而不是使用C风格定义< 宏。C++常量可以被类型检查,宏不能。在代码中有一个奇怪的C和C++混合。C++程序员很少使用 FPAST/COD>和 FGED。U使用代码> STD::String 而不是固定大小的字符数组,那么根本就不需要限制。代码会更简单更健壮。我意识到,你可能无法控制你所教的内容,但你正在学习C++的硬方法。,c++,arrays,C++,Arrays" /> const siZePiPoPoCtCube=5 而不是使用C风格定义< 宏。C++常量可以被类型检查,宏不能。在代码中有一个奇怪的C和C++混合。C++程序员很少使用 FPAST/COD>和 FGED。U使用代码> STD::String 而不是固定大小的字符数组,那么根本就不需要限制。代码会更简单更健壮。我意识到,你可能无法控制你所教的内容,但你正在学习C++的硬方法。,c++,arrays,C++,Arrays" />

不覆盖数组中的元素 我正在编写一个程序,我们应该在我正在学习的计算机科学课程中学习代码,在那里我们学习C++。在这个程序中,我试图让用户输入他们可能喜欢的爆米花口味,但不超过10(或9)个字符。当我尝试包含大于10个字符的flavors时,程序不会导致错误或正常工作,只会将超过10个字符存储到数组中的下一个元素中。如何阻止程序执行此操作 #define POP_COUNT 5 #define POP_SIZE 10 int main() { char popcorn[POP_COUNT][POP_SIZE]; fputs("Enter your 5 favourite popcorn flavours: \n", stdout); for (int i = 0; i < POP_COUNT; i++) { fgets(popcorn[i], POP_SIZE, stdin); popcorn[i][POP_SIZE - 1] = 0; } cout << popcorn[0] << endl; cout << popcorn[1] << endl; fputs("Your favourite flavours are: \n", stdout); for (int i = 0; i < POP_COUNT; i++) { fputs(popcorn[i], stdout); } } #定义POP#u计数5 #定义POP_尺寸10 int main(){ 木炭爆米花[爆米花数量][爆米花大小]; fputs(“输入您最喜欢的5种爆米花口味:\n”,标准甜点); 对于(int i=0;i欢迎来到C++。与C风格的固定长度数组相比,你也要声明“代码> const siZePiPoPoCtCube=5 而不是使用C风格定义< 宏。C++常量可以被类型检查,宏不能。在代码中有一个奇怪的C和C++混合。C++程序员很少使用 FPAST/COD>和 FGED。U使用代码> STD::String 而不是固定大小的字符数组,那么根本就不需要限制。代码会更简单更健壮。我意识到,你可能无法控制你所教的内容,但你正在学习C++的硬方法。

不覆盖数组中的元素 我正在编写一个程序,我们应该在我正在学习的计算机科学课程中学习代码,在那里我们学习C++。在这个程序中,我试图让用户输入他们可能喜欢的爆米花口味,但不超过10(或9)个字符。当我尝试包含大于10个字符的flavors时,程序不会导致错误或正常工作,只会将超过10个字符存储到数组中的下一个元素中。如何阻止程序执行此操作 #define POP_COUNT 5 #define POP_SIZE 10 int main() { char popcorn[POP_COUNT][POP_SIZE]; fputs("Enter your 5 favourite popcorn flavours: \n", stdout); for (int i = 0; i < POP_COUNT; i++) { fgets(popcorn[i], POP_SIZE, stdin); popcorn[i][POP_SIZE - 1] = 0; } cout << popcorn[0] << endl; cout << popcorn[1] << endl; fputs("Your favourite flavours are: \n", stdout); for (int i = 0; i < POP_COUNT; i++) { fputs(popcorn[i], stdout); } } #定义POP#u计数5 #定义POP_尺寸10 int main(){ 木炭爆米花[爆米花数量][爆米花大小]; fputs(“输入您最喜欢的5种爆米花口味:\n”,标准甜点); 对于(int i=0;i欢迎来到C++。与C风格的固定长度数组相比,你也要声明“代码> const siZePiPoPoCtCube=5 而不是使用C风格定义< 宏。C++常量可以被类型检查,宏不能。在代码中有一个奇怪的C和C++混合。C++程序员很少使用 FPAST/COD>和 FGED。U使用代码> STD::String 而不是固定大小的字符数组,那么根本就不需要限制。代码会更简单更健壮。我意识到,你可能无法控制你所教的内容,但你正在学习C++的硬方法。,c++,arrays,C++,Arrays,您的问题源于fgets()的正常行为。它读取的字符数不会超过指定大小的缓冲区所能容纳的字符数,包括用于终止符的空间。在给定调用中未读取的任何字符都将在流中等待,并将在下一次调用中读取 要解决此问题,您必须首先检测它。您可以通过检查目标缓冲区中是否存储了换行符来实现此目的。如果是,则说明您很好,但如果不是,则仅读取了部分行。另外,请注意,您不需要手动插入终止符--fgets()成功后将始终包含终止符 如果你只想丢弃任何额外的字符,那么在第二种情况下,你必须这样做——读和忽略额外的字符,直到你读了换

您的问题源于
fgets()
的正常行为。它读取的字符数不会超过指定大小的缓冲区所能容纳的字符数,包括用于终止符的空间。在给定调用中未读取的任何字符都将在流中等待,并将在下一次调用中读取

要解决此问题,您必须首先检测它。您可以通过检查目标缓冲区中是否存储了换行符来实现此目的。如果是,则说明您很好,但如果不是,则仅读取了部分行。另外,请注意,您不需要手动插入终止符--
fgets()
成功后将始终包含终止符


如果你只想丢弃任何额外的字符,那么在第二种情况下,你必须这样做——读和忽略额外的字符,直到你读了换行符,或者你到达文件的结尾。< /P>欢迎来到C++。与C风格的固定长度数组相比,你也要声明“代码> const siZePiPoPoCtCube=5 而不是使用C风格<代码>定义< <代码>宏。C++常量可以被类型检查,宏不能。在代码中有一个奇怪的C和C++混合。C++程序员很少使用<代码> FPAST/COD>和 FGED<代码>。U使用代码> STD::String 而不是固定大小的字符数组,那么根本就不需要限制。代码会更简单更健壮。我意识到,你可能无法控制你所教的内容,但你正在学习C++的硬方法。