我正在尝试使用气泡排序方法来组织矩阵。我遇到了一个错误,上面显示分段故障(核心倾倒)。我正在使用Ubuntu和Codelite在虚拟机上编程。希望你能帮我。
这是代码。
#include <stdio.h>
#include <stdio.h>
#include <math.h>
int main(){
int tam, comp, var;
printf("Ingrese el tamano del array que va a crear:n");
scanf("%d", tam);
int arr[tam];
printf("Ingrese los elementos del array:n");
for(int i=0; i < tam; i++){
printf("Elemento arr%d", i+1);
scanf("%d", &arr[i]);
}
for(int j=0; j < tam; j++){
for(comp=0; comp<tam; comp++){
if(arr[comp]<arr[comp+1]){
var=arr[comp];
arr[comp]=arr[comp + 1];
arr[comp + 1]=var;
}
}
}
printf("La matriz en orden descendente es:n");
for(int i=0; i < tam; i++){
printf("%d ", arr[i]);
}
}
以下提出的代码:
- 清洁编译(Linux上的GCC)
- 执行所需的操作
- 不知道故障
- 纠正问题注释中列出的问题
- 正确检查I/O错误,并正确地将错误消息路由到
stderr
- 将数据与使用的位置密切相关。
- 利用适当的水平间距进行可读性
- 记录为什么包含每个标头文件
建议使用puts()
而不是printf()
进行不包含任何格式的输出。
现在提出的代码:
#include <stdio.h> // printf(), scanf(), fprintf(), stderr
//#include <math.h> <<-- contents not used, so do not include
#include <stdlib.h> // exit(), EXIT_FAILURE
int main( void )
{
int tam;
printf( "Ingrese el tamano del array que va a crear:n" );
if( 1 != scanf( "%d", &tam ) )
{
fprintf( stderr, "scanf for 'tam' failedn" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
int arr[tam];
printf( "Ingrese los elementos del array:n" );
for( int i=0; i < tam; i++ )
{
printf( "Elemento arr%d", i+1 );
if( 1 != scanf( "%d", &arr[i] ) )
{
fprintf( stderr, "scanf for array entry %d failedn", i+1 );
exit( EXIT_FAILURE );
}
// implied else, scanf successful.
}
for( int j=0; j < tam; j++ )
{
for( int comp=0; comp < (tam-1); comp++ ) // note correction and data scope limiting
{
if( arr[comp] < arr[comp+1] )
{
int var = arr[comp]; // note data scope limiting
arr[comp] = arr[comp + 1];
arr[comp + 1] = var;
}
}
}
printf( "La matriz en orden descendente es:n" );
for( int i=0; i < tam; i++ )
{
printf( "%d ", arr[i] );
}
}