标签: turbo-c

Turbo C++:为什么printf在没有传递变量的情况下打印期望值?

在多项选择测试中提出了一个问题:以下程序的输出结果如何:

#include <stdio.h>

int main(void)
{
    int a = 10, b = 5, c = 2;

    printf("%d %d %d\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并且选择是10,5和2的各种排列.出于某种原因,它适用于我们在大学时使用的Turbo C++.但是,在使用gcc(在启用-Wall时发出警告)或clang(启用了-Wformat并在默认情况下发出警告)或在Visual C++中编译时,它不会.正如预期的那样,输出是垃圾值.我的猜测是它与Turbo C++是16位,在32位Windows XP上运行这一事实有关,或者TCC在标准方面很糟糕.

c printf undefined-behavior turbo-c

7
推荐指数
1
解决办法
2300
查看次数

c全局变量用法中的键盘中断句柄

我有一个像空间影响的项目,我试图处理键盘中断.我的问题是我不想使用global variable(ship). my_keyboard_interrupt_handler但我发送船作为参数这个功能,我不知道如何安排.setvect(0x09,my_keyboard_interrupt_handler);如果有任何使用setvect函数的方式,请给我任何建议.

int main()
{
    void interrupt (*old_keyboard_interrupt_handler)();
    ship = (space_ship*)malloc(sizeof(space_ship));
    old_keyboard_interrupt_handler = getvect(0x09);
        ...
    setvect(0x09,my_keyboard_interrupt_handler);
    return 0;
}
int handle_key()
{
    int key;

    asm{   
        sti   
        in al,60H   
        xor ah,ah   
        mov key,ax   
        in al,61h   
        or al,82h   
        out 61h,al   
        and al,7fh   
        out 61h,al   
        mov al,20h   
        out 20h,al   
       } 

     return key;
}
Run Code Online (Sandbox Code Playgroud)

我的键盘中断处理程序:

void interrupt my_keyboard_interrupt_handler()
{
    int key = handle_key();
    if(key == SPACE){

    }else if(key == RIGHT){
        ship->column++; 
    }else if(key == LEFT){
        ship->column--;
    }else if(key …
Run Code Online (Sandbox Code Playgroud)

c dos interrupt turbo-c

6
推荐指数
1
解决办法
1149
查看次数

c中使用三元运算符的错误

我在C中有一段代码如下:

main()
{
    int a=10, b;
    a>=5 ? b=100 : b=200 ;
    printf("%d" , b);
}
Run Code Online (Sandbox Code Playgroud)

在unix中运行gcc编译器上的代码会将编译时错误生成为'赋值左值所需的左值',并将错误指向b = 200,而在使用Turbo C编译的窗口中,将200作为输出.

任何人都可以解释一下这种情况究竟发生了什么?

c gcc turbo-c

6
推荐指数
2
解决办法
1588
查看次数

禁止"将软盘插入驱动器X:"

我试图检查驱动器A中是否存在任何磁盘:(在我的程序安装之后,我需要确保计算机无法从安装软盘启动).我已经尝试使用_access方法(未定义引用...),FILE*并在软盘内制作目录并在检查后将其删除.不幸的是,DOS显示了关于将磁盘放入驱动器的丑陋文本(销毁我的TUI并让用户认为驱动器中的磁盘很重要).那么如何抑制此消息,或安全检查磁盘是否存在于驱动器中?

c dos floppy turbo-c

6
推荐指数
1
解决办法
186
查看次数

我如何进行"数百万次计算?"

我的代码粘贴在下面.当我运行这个程序时,它继续计算.我正在使用旧的Turbo C++编译器.这样的程序需要多长时间才能执行?我等了大约5分钟,但没有任何输出.

/*The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.
*/
#include<stdio.h>
#include<conio.h>
#define TWO_MILLION 2*1000*1000
int IsPrime(long unsigned int num);
int main()
{
    long unsigned int i,sum=0;
    clrscr();
    for(i=2;i<TWO_MILLION;i++)
    {
        if(IsPrime(i))
        sum+=i;
    }
    gotoxy(25,25);
    printf("%ld",sum);
    getch();
    return 0;
}
int IsPrime(long unsigned int num)
{
    int flag=1;
    long unsigned int i;
    for(i=2;i<num;i++)
    {
        if(num%i==0)
        {
            flag=0;
            break;
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c turbo-c

5
推荐指数
1
解决办法
1084
查看次数

如何在turbo c ++ 16位编译器中创建项目

我想创建一个项目文件turbo c ++并链接这个项目中的文件.虽然我已经尝试过,但我发现只有一个选项可以打开一个项目没有选项来创建一个新项目.那么如何做到这一点.

c c++ ide turbo-c++ turbo-c

5
推荐指数
1
解决办法
6226
查看次数

C二维阵列

我将问下面提供的有关我的代码的问题......我的问题是在哪里有评论/*This line*/.我使用变量y和x:y表示HEIGHT,x表示WIDTH.我第一次运行该程序时,代码scanf("%d,%d", &y, &x);却很遗憾,程序运行不正常.但是当我用这个修改代码时scanf("%d,%d", &x, &y);,我能够依次运行程序.我无法理解它是如何发生的,因为我将y设置为HEIGHT,将x设置为WIDTH?

   File   Edit   Run   Compile   Project   Options   Debug   Break/watch
????????????????????????????????????? Edit ?????????????????????????????????????
?      Line 1     Col 43  Insert Indent Tab Fill Unindent * C:NONAME.C         ?
?#define HEIGHT 5                                                              ?
?#define WIDTH 10                                                              ?
?                                                                              ?
?char enemy[HEIGHT][WIDTH]=                                                    ?
?        { {0,0,0,0,0,0,0,0,0,0},                                              ?
?          {0,1,1,0,0,1,0,0,0,0},                                              ?
?          {0,0,0,1,0,1,0,1,1,0},                                              ?
?          {0,0,0,0,0,0,0,0,1,1},                                              ?
?          {0,0,1,1,0,1,0,0,0,1} };                                            ?
?                                                                              ?
?main()                                                                        ?
?{                                                                             ?
?        char friend[HEIGHT][WIDTH];                                           ?
?        int x,y;                                                              ? …
Run Code Online (Sandbox Code Playgroud)

c multidimensional-array turbo-c

5
推荐指数
1
解决办法
2万
查看次数

如何使用Turbo C在dosbox中正确分配内存缓冲区以应用双缓冲?

好的,所以我尝试在使用IDE Turbo C ++ 3.0的模拟环境(DosBox)中应用双重缓冲技术,我正在运行Windows 7 64bit(不确定是否重要),而且我不知道如何正确执行缓冲例程在这种环境下。

我遇到的主要问题是我似乎无法执行以下赋值语句:

double_buffer = (byte_t far*)farmalloc((unsigned long)320*200);

(请注意320和200是屏幕尺寸)...我只是得到NULL分配。

我尝试将DosBox的默认RAM使用率更改为32,而不是16,但这没有任何作用。我不确定这是模拟器还是Turbo C的代码出了问题。(请注意,它符合要求)。

这是我在网上找到的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <alloc.h>

typedef unsigned char byte_t;

byte_t far* video_buffer = (byte_t far*)0xA0000000;

void vid_mode(byte_t mode){
    union REGS regs;
    regs.h.ah = 0;
    regs.h.al = mode;
    int86(0x10,&regs,&regs);
}

void blit(byte_t far* what){
    _fmemcpy(video_buffer,what,320*200);
}

int main(){

    int x,y;
    byte_t far* double_buffer;

    double_buffer = (byte_t far*)farmalloc((unsigned long)320*200);
    if(double_buffer == NULL){
        printf("sorry, not enough memory.\n");
        return 1; …
Run Code Online (Sandbox Code Playgroud)

c dosbox turbo-c double-buffering x86-16

5
推荐指数
1
解决办法
665
查看次数

使用 Turbo C 编译并链接到 .com 文件

我正在尝试使用 Turbo C 编译器和链接器编译一个简单的程序并将其链接到 DOS .com 文件。我尝试了我能想到的最简单的 C 程序。

void main()
{}
Run Code Online (Sandbox Code Playgroud)

Turbo C 链接器中是否有链接到 com 文件的命令行参数?

我从链接器收到的错误消息如下:

“致命:无法生成 COM 文件:入口点地址无效”

我知道 com 文件需要入口点位于 100h。Turbo C 是否有设置此地址的选项?

linker dos memory-model turbo-c x86-16

5
推荐指数
2
解决办法
1823
查看次数

C 中的 if-else if 序列

我使用以下逻辑来测试三角形是等腰、等边、不等边三角形还是直角三角形。

if (side1 == side2 || side2 == side3 || side1 == side3)
    printf("Isosceles triangle.");
else if (side1 == side2 && side2 == side3 && side3 == side1)
    printf("equilateral triangle");
Run Code Online (Sandbox Code Playgroud)

我得到边 3 3 3 的输出为等腰,但不是等边,但是当我交换首先编写等边逻辑的逻辑时,我得到等边。我不明白发生了什么事?

c turbo-c

4
推荐指数
1
解决办法
1237
查看次数