打印完第二个printf后,代码退出并显示Run Failed并表示退出2级(无论输入是什么)
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]);
}
}
}
}
答案 0 :(得分:2)
您需要将n_m_matrix
的声明移动到循环中,以便在输入包含尺寸的变量后将其移动。
正如其他人所提到的,test > testcases
中也有拼写错误,应该是<
。
输入尺寸后,您应该阅读额外的字符,以阅读换行符。否则它将在输入缓冲区中的维度之后留下换行符,并且在读取内容时将读取该第一个%c
输入。
您也可以考虑使用fgets()
来读取每一行,而不是逐字逐句。您编写它的方式,如果每行末尾有换行符,它们将被插入到数组中。目前尚不清楚是否需要。如果是,请确保将它们包含在行长度输入中。
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]);
}
}
}
}
答案 1 :(得分:2)
为了清除几个问题之间的混淆,第一个在代码中调用未定义行为的问题是,使用未初始化的变量作为VLA的大小。
for
循环逻辑也是错误的,字符输入可能会产生一些问题。 (与\n
一起输入时)。
正确的代码是(考虑到你不希望输入到数组中的空格。因为如果你这样做,还有其他更好的选择,如fgets
等)。
#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;
}
如果您需要比此更大的阵列大小,请使用动态内存分配。这将满足阵列中更大的内存需求。
答案 2 :(得分:0)
您需要使用动态内存分配malloc
方法。矩阵n_m_matrix
维度是根据用户输入动态决定的。
n_m_matrix
test>testcase
to test<testcase
printf("Enter the lines and length of the test cases ");
scanf("%d%d",&n_lines,&m_length);