Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序运行后是否立即退出?_C - Fatal编程技术网

C程序运行后是否立即退出?

C程序运行后是否立即退出?,c,C,嘿,我有一个关于我写的程序的快速问题。由于某种原因,它会在运行后立即退出。当我按run键时没有错误,但显然有些地方出了问题 因为我根本无法让它运行,所以我无法测试它,以确保它完全符合我的需要 代码如下: #include <stdio.h> #include <stdlib.h> #define MAXCHARS 31 struct TempInfo { char city[MAXCHARS]; int day;

嘿,我有一个关于我写的程序的快速问题。由于某种原因,它会在运行后立即退出。当我按run键时没有错误,但显然有些地方出了问题

因为我根本无法让它运行,所以我无法测试它,以确保它完全符合我的需要

代码如下:

#include <stdio.h>
#include <stdlib.h>
#define MAXCHARS 31

struct TempInfo
    {
        char city[MAXCHARS];
        int day;
        double fahr;
        double cels;
    };

void input_TempInfo(struct TempInfo * arr, int size);
void print_TempInfo(struct TempInfo * arr, int size);

void main(int argc, char *argv[])
{
    int size;
    struct TempInfo arr[size];
    struct TempInfo * arrPtr;
    arrPtr = arr;

    do
    {
        printf("How many cities / days / temps would you like to enter? ");
        scanf("%i", &size);
        if (size < 1 || size > 20)
        {
            printf("Not a valid number. Type another: ");
            scanf("%i", &size);
        }
    } while (size >= 1 && size <= 20);

    input_TempInfo(arrPtr, size);
    print_TempInfo(arrPtr, size);

    return 0;
}

void input_TempInfo(struct TempInfo * arr, int size)
{
    int i, k;

    for (i = 0, k = 0; k < size; i++, k++)
    {
        printf("Enter the city: ");
        while (((arr[k].city[i] = getchar()) != '\n') && (i < MAXCHARS))
            i++;
        arr[k].city[i] = '\0';

        do
        {
            printf("Enter the day: ");
            scanf("%i", &arr[k].day);
            if (arr[k].day < 1 || arr[k].day > 366)
            {
                printf("Invalid day number. Type another: ");
                scanf("%i", &arr[k].day);
            }
        } while (arr[k].day >= 1 && arr[k].day <= 366);

        printf("Enter a temperature in Fahrenheit: ");
        scanf("%lf", &arr[k].fahr);

        arr[k].cels = (arr[k].fahr - 32) * 5/9;
    }
}

void print_TempInfo(struct TempInfo * arr, int size)
{
    int i, k;

    for (i = 0, k = 0; k < size; i++, k++)
    {
        printf("City\tDay\tFahr\tCels");
        printf("------------------------------");
        printf("%s\t%i\t%.1lf\t%.1lf",
            arr[k].city, arr[k].day, arr[k].fahr, arr[k].cels);
    }
}
编辑我将我的“arr[size]”和“*arrPtr”的声明重新安排在“do-while”之后,效果更好。非常感谢大家。

这段代码

int size;
struct TempInfo arr[size];
struct TempInfo * arrPtr;
arrPtr = arr;
错误:您使用的是可变长度数组,这里是未初始化大小的arr

我希望,如果您使用所有警告和调试信息gcc-Wall-Wextra-g进行编译,那么您会收到警告。不幸的是,GCC4.9的情况并非如此,除非您也要求进行优化,所以对于GCC-Wall-Wextra-O-g,我得到了一个警告。因此,请提交一个错误

至少,移动这个按钮。。。whilesize>=1&&size此代码块

int size;
struct TempInfo arr[size];
struct TempInfo * arrPtr;
arrPtr = arr;
错误:您使用的是可变长度数组,这里是未初始化大小的arr

我希望,如果您使用所有警告和调试信息gcc-Wall-Wextra-g进行编译,那么您会收到警告。不幸的是,GCC4.9的情况并非如此,除非您也要求进行优化,所以对于GCC-Wall-Wextra-O-g,我得到了一个警告。因此,请提交一个错误


至少,移动这个按钮。。。whilesize>=1&&size int size;结构TempInfo arr[size];它能编译吗。。如何编译和运行它?如果您说无法运行它,您如何知道它在运行后正在退出?main应返回int。如果您使用visual studio,并且可以成功地看到项目生成,请尝试使用CTRL+F5运行它。它将以调试模式运行,并要求您在程序运行后按任意键继续。如果您使用的是eclipse,那么不管怎样,您都应该在控制台中看到输出。您尚未向我们提供此文件是否编译的信息。int size;结构TempInfo arr[size];它能编译吗。。如何编译和运行它?如果您说无法运行它,您如何知道它在运行后正在退出?main应返回int。如果您使用visual studio,并且可以成功地看到项目生成,请尝试使用CTRL+F5运行它。它将以调试模式运行,并要求您在程序运行后按任意键继续。如果您使用的是eclipse,那么不管怎样,您都应该在控制台中看到输出。您还没有告诉我们是否编译。gcc-std=c99-Wall-pedantic-Wextra-g run.c-o run gcc 4.8.2不会警告未初始化的大小。。。然而,最好的建议是始终使用严格的警告级别。所以我改进了我的答案。有趣的是,启用优化更改了警告-在gcc 4.8.2中,我仍然没有收到关于大小的警告,但它打印了一堆额外的警告…@BasileStarynkevitch我确实移动了“do while”并且它起了作用。但我想知道我将如何学习如何阅读调试器?它有很多十六进制和八进制,我不知道它们是什么意思。@JordanLindsay:我确信你的调试器有一些文档。如果系统没有可用的调试器,请考虑更改为其他系统;在自由软件Linux上,gcc编译器和gdb调试器有文档和许多教程。所以也许考虑在你的电脑上切换到Linux!gcc-std=c99-Wall-pedantic-Wextra-g run.c-o run gcc 4.8.2没有警告未初始化的大小。。。然而,最好的建议是始终使用严格的警告级别。所以我改进了我的答案。有趣的是,启用优化更改了警告-在gcc 4.8.2中,我仍然没有收到关于大小的警告,但它打印了一堆额外的警告…@BasileStarynkevitch我确实移动了“do while”并且它起了作用。但我想知道我将如何学习如何阅读调试器?它有很多十六进制和八进制,我不知道它们是什么意思。@JordanLindsay:我确信你的调试器有一些文档。如果系统没有可用的调试器,请考虑更改为其他系统;在自由软件Linux上,gcc编译器和gdb调试器有文档和许多教程。所以也许考虑在你的电脑上切换到Linux!