C 代码在输入和输出语句之后退出
打印第二个printf后,代码退出,并表示运行失败,表示在级别2上退出(无论输入是什么)C 代码在输入和输出语句之后退出,c,C,打印第二个printf后,代码退出,并表示运行失败,表示在级别2上退出(无论输入是什么) void main() { int测试用例; int n_线,m_长度; int测试,线条,长度; 字符n_m_矩阵[n_行][m_长度]; printf(“输入测试用例的数量”); scanf(“%d”和测试用例); printf(“%d”,测试用例); 对于(测试=0;测试>测试用例;测试++) { printf(“输入测试用例的行和长度”); scanf(“%d%d”、&n\u行、&m\u长度); 对
void main()
{
int测试用例;
int n_线,m_长度;
int测试,线条,长度;
字符n_m_矩阵[n_行][m_长度];
printf(“输入测试用例的数量”);
scanf(“%d”和测试用例);
printf(“%d”,测试用例);
对于(测试=0;测试>测试用例;测试++)
{
printf(“输入测试用例的行和长度”);
scanf(“%d%d”、&n\u行、&m\u长度);
对于(lines=0;lines您需要使用动态内存分配,malloc
方法。矩阵n\m\u矩阵
维度根据用户输入动态确定
使用malloc将内存分配给n\m\u矩阵
在for循环中,将逻辑错误test>testcase
更正为test您需要使用动态内存分配malloc
方法。矩阵n\m\u矩阵
维度根据用户输入动态确定
使用malloc将内存分配给n\m\u矩阵
在for循环中,将逻辑错误test>testcase
更正为test您需要将n_m_矩阵
的声明移动到循环中,以便在您输入保存维度的变量之后
正如其他人提到的,您在test>testcases
中也有一个输入错误,它应该是您需要将n_m_matrix
的声明移动到循环中,以便在您输入保存维度的变量之后
正如其他人提到的,您在test>testcases
中也有一个输入错误,应该是为了消除服务器问题之间的混淆,调用代码中未定义行为的第一个问题是,使用未初始化变量作为VLA的大小
另外,
的循环逻辑错误,字符输入可能会在处理方式上产生一些问题。(使用\n
输入时)
正确的代码应该是(考虑到您不希望将空格输入数组。因为如果您这样做,那么还有其他更好的选择,如fgets
等)
#包括
#包括
#定义MAXSIZE 1024
内部主(空)
{
int测试用例;
int n_线,m_长度;
int测试,线条,长度;
printf(“输入测试用例的数量”);
if(scanf(“%d”,&testcases)!=1){
fprintf(stderr,“%s\n”,“输入错误”);
出口(1);
}
如果(testcases要消除服务器问题之间的混淆,调用代码中未定义行为的第一个问题是,使用未初始化变量作为VLA的大小
另外,
的循环逻辑错误,字符输入可能会在处理方式上产生一些问题。(使用\n
输入时)
正确的代码应该是(考虑到您不希望将空格输入数组。因为如果您这样做,那么还有其他更好的选择,如fgets
等)
#包括
#包括
#定义MAXSIZE 1024
内部主(空)
{
int测试用例;
int n_线,m_长度;
int测试,线条,长度;
printf(“输入测试用例的数量”);
if(scanf(“%d”,&testcases)!=1){
fprintf(stderr,“%s\n”,“输入错误”);
出口(1);
}
如果(测试用例使用int main()
而不是void main()
。这很古老。test
?使用int main()
而不是void main())
。这很古老。test
?您不需要使用malloc
,只需在设置变量后声明数组。@Barmarn行
和m行长度
的值会动态变化(基于用户输入),因此静态内存分配是不可能的。您可以简单地将数组声明移动到for
循环中,使其位于输入之后。如果您的编译器支持VLA功能,这是可能的。这意味着它必须是C99或C11编译器,当然MCVS不是(它支持C90,有一些但不是全部C99/C11扩展,而且,顺便说一句,它不支持VLA)。您不需要使用malloc
,只需要在设置变量后声明数组。@Barmarn行
和m长度
的值会动态变化(基于用户输入),因此静态内存分配是不可能的。您可以简单地将数组声明移动到for
循环中,使其位于输入之后。如果您的编译器支持VLA功能,这是可能的。这意味着它必须是C99或C11编译器,当然MCVS不是(它支持C90,带有一些但不是全部C99/C11扩展,而且,据我所知,它不支持VLA)。在%d%d
之后的空格是可以的,但如果它是键入的,则不会。此外,最里面的一对循环将把换行符视为存储在数组中的有效字符,这可能是可以的,也可能是不可以的。@JonathanLeffler谢谢,我觉得有点问题。我在输入的其余部分添加了一些关于换行符的内容。空格after%d%d
是可以的,但如果键入就不行。另外,最里面的一对循环会将换行符视为存储在数组中的有效字符,这可能是可以的,也可能是不可以的。@JonathanLeffler谢谢,我感觉有点不对劲。我已经在输入的其余部分添加了一些关于换行符的内容。没有一个好的方法来除了了解问题空间之外,还要确定限制。但是你确实需要限制VLA的大小,否则你的堆栈将无法恢复。在这一点上,动态内存分配变得明智了。@JonathanLeffler.:我明白了。。是的,动态内存分配在这方面会很有帮助。没有好的方法来确定limit除了了解问题空间之外,还需要限制VLA的大小,否则会导致堆栈崩溃,无法恢复。此时,动态内存分配变得非常敏感
void main()
{
int testcases;
int n_lines ,m_length;
int test, lines, length;
char n_m_matrix[n_lines][m_length];
printf("Enter the no. of Test Cases ");
scanf("%d",&testcases);
printf("%d",testcases);
for(test=0;test>testcases;test++)
{
printf("Enter the lines and length of the test cases ");
scanf("%d%d",&n_lines,&m_length);
for(lines=0;lines<n_lines;lines++)
{
for(length=0;length<m_length;length++)
{
scanf("%c",&n_m_matrix[lines][length]);
}
}
}
}
int main()
{
int testcases;
int n_lines ,m_length;
int test, lines, length;
printf("Enter the no. of Test Cases ");
scanf("%d",&testcases);
printf("%d\n",testcases);
for(test=0; test < testcases; test++)
{
printf("Enter the lines and length of the test cases ");
scanf("%d%d",&n_lines,&m_length);
getc(); // Skip over the newline
char n_m_matrix[n_lines][m_length];
for(lines=0;lines<n_lines;lines++)
{
for(length=0;length<m_length;length++)
{
scanf("%c",&n_m_matrix[lines][length]);
}
}
}
}
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1024
int main(void)
{
int testcases;
int n_lines ,m_length;
int test, lines, length;
printf("Enter the no. of Test Cases ");
if( scanf("%d",&testcases) != 1){
fprintf(stderr, "%s\n","Error in input" );
exit(1);
}
if( testcases <= 0 ){
fprintf(stderr,"%s\n","Enter nonzero integer for testcases");
exit(1);
}
printf("%d",testcases);
for(test = 0; test < testcases; test++)
{
printf("Enter the lines and length of the test cases ");
if(scanf("%d%d",&n_lines,&m_length)!=1){
fprintf(stderr, "%s\n","Error in input" );
exit(1);
}
if( n_lines <= 0 || m_length <= 0 || !(n_lines <= MAXSIZE && m_length <= MAXSIZE)){
fprintf(stderr, "%s\n","Error in input n_lines and m_length" );
exit(1);
}
char n_m_matrix[n_lines][m_length];
for(lines = 0; lines < n_lines; lines++)
{
for(length = 0; length < m_length; length++)
{
if( scanf(" %c",&n_m_matrix[lines][length]) != 1)
{
fprintf(stderr, "%s\n","Eror in input" );
exit(1);
}
}
}
// work with VLA here.
}
return 0;
}