标题:大佬们,我这是有啥问题吗,编译没问题,执行就失败,提示已停止工作
只看楼主
kuaipao
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-4-14
 问题点数:0 回复次数:2 
大佬们,我这是有啥问题吗,编译没问题,执行就失败,提示已停止工作
#include <stdio.h>
int main() {
    int num1,count1=0;
    int number1;
    int array1[num1];
    printf("请输入要排序几位数:");
    while(1) {
        if(scanf("%d",&num1)==1) {
            printf("请输入要排序的数:");
            int i=0;
            while(1) {
                if(scanf("%d",&number1)==1) {
                    array1[count1]=number1;
                    count1++;
                } else {
                    printf("您的输入有误,请重新输入!\n");
                }
                if(count1==num1) {
                    break;
                }
            }
            break;
        } else {
            printf("您的输入有误,请重新输入!\n");
        }
    }
    return 0;
}
搜索更多相关主题的帖子: printf 编译 工作 输入 int 
2021-04-14 14:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
int array1[num1];
此时num1还没被赋值呀!
当然,这不是最严重的,最严重的是 为什么要将内部用的变量一股脑定义到函数头部去??

while( 1 )
起不了作用,还影响逻辑过程的清晰化。
最起码,你可以定义一个函数,这个函数用来确保读取了数据。

int array1[num1];
不知道你的题目要求是什么,当你使用VLA,要确保足够小不爆栈,但你的代码中并没有限制num1的最大值。
2021-04-14 15:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

void ensure_input( const char* tip, const char* err_tip, int success_num, const char *restrict fmt, ... )
{
    while( 1 )
    {
        printf( "%s", tip );

        va_list ap;
        va_start( ap, fmt );
        int rc = vscanf( fmt, ap );
        va_end( ap );

        if( rc == -1 )
            exit( 1 );
        if( rc == success_num )
            break;
        scanf( "%*[^\n]%*c" );
        printf( "%s", err_tip );
    }
}

int main( void )
{
    size_t num;
    ensure_input( "请输入要排序几位数: ", "您的输入有误,请重新输入!\n", 1, "%zu", &num );

    int* array = malloc( num * sizeof(*array) );
    if( !array )
    {
        puts( "内存空间不足,退出." );
        return 1;
    }

    printf( "请输入要排序的数:\n" );
    for( size_t i=0; i!=num; ++i )
        ensure_input( "", "您的输入有误,请重新输入!\n", 1, "%d", &array[i] );

    printf( "你输入的数分别是:" );
    for( size_t i=0; i!=num; ++i )
        printf( "%d%c", array[i], " \n"[i+1==num] );

    free( array );
    return 0;
}


请输入要排序几位数: fuck
您的输入有误,请重新输入!
请输入要排序几位数: 5
请输入要排序的数:
1
2
bitch
您的输入有误,请重新输入!
3
4
5
你输入的数分别是:1 2 3 4 5

2021-04-14 16:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-505450-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.727390 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved