導航:首頁 > 源碼編譯 > pta編譯錯誤怎麼解決

pta編譯錯誤怎麼解決

發布時間:2025-02-28 18:35:02

❶ 怎麼自學c語言,需要怎麼學習

❷ 求助PTA L1-025 正整數A+B,C++提交後顯示格式錯誤,求解哪裡錯了

我在PTA網站上測試了你的代碼,沒問題。

應該是編譯器選的不對,你選成g++。

#include<iostream>
#include<string>
usingnamespacestd;

intmain(){
//輸入,一行讀取,按照空格拆分
stringinput_str;
getline(cin,input_str);

intindex=input_str.find('');
stringinput_str1=input_str.substr(0,index);
stringinput_str2=input_str.substr(index+1,input_str.length()-input_str1.length());
if(input_str1.empty())input_str1="?";
//cout<<input_str1<<"aaa"<<endl;
//cout<<input_str2<<"bbb"<<endl;

boolflag1=true;
boolflag2=true;
//判斷
for(autoch:input_str1)
{
if(!isdigit(ch))
{
flag1=false;
input_str1="?";
break;
}
}

for(autoch:input_str2)
{
if(!isdigit(ch))
{
flag2=false;
input_str2="?";
break;
}
}

//計算
if(flag1&&flag2)
{
inta=atoi(input_str1.c_str());
intb=atoi(input_str2.c_str());
if(a<1||a>1000)
cout<<"?"<<"+"<<input_str2<<"="<<"?"<<endl;
elseif(b<1||b>1000)
cout<<input_str1<<"+"<<"?"<<"="<<"?"<<endl;
else
cout<<input_str1<<"+"<<input_str2<<"="<<a+b<<endl;
}
else
{
cout<<input_str1<<"+"<<input_str2<<"="<<"?"<<endl;
}

system("pause");
return0;
}

❸ 指針和引用有什麼區別 請寫一個簡單的程序說明

1.從內存上來講系統為指針分寸內存空間,而引用與綁定的對象共享內存空間,系統不為引用變數分配內容空間。

2指針初始化以後可以改變指向的對象,而引用定義的時候必須要初始化,且初始化以後不允許再重新綁定對象。

3.所以引用訪問對象是直接訪問。指針訪問對象是間接訪問。

4。如果pa是指針,那麼*pa就是引用了。

但是兩者在作為形參的時候非常相似,區別是指針拷貝副本,引用不拷貝。程序如下:

#include<stdio.h>

voidpt(int*pta,int*ptb)

{

int*ptc;

ptc=pta;pta=ptb;ptb=ptc;

}

voidref(int&ra,int&rb)

{

intrc;

rc=ra;ra=rb;rb=rc;

}

voidmain()

{

inta=3;intb=4;

int*pa=&a;int*pb=&b;

pt(pa,pb);

printf("zhen:a=%d,b=%d ",a,b);

ref(a,b);

printf("yinyong:a=%d,b=%d ",a,b);

}

輸出結果如下圖:

❹ 這個程序在putty里編譯就可以運行,但不知道為什麼在浙大的PTA平台上不可以。求解答,謝謝大家。

答案錯誤,不是程序編譯不了,仔細審題,肯定你的程序在輸入輸出上面和要求不符合。

❺ 飛思卡爾 mc9s12xs128 單片機 怎樣才可以 在EPROM 或者在 FASH 中 保存運行的參數

有相關資料可以參考的,你搜一下flash to epprom相關資料:
用Flash模擬EEPROM
本程序利用S08系列單片機的片內Flash模擬EEPROM。解決部分8位機沒有EEPROM導致在運用上的局限。本程序提供一個初始化函數和三個功能函數。用戶必須在調用功能函數前調用調用初始化函數。三個功能函數分別是位元組寫入、位元組讀取、EEPROM全擦除。用戶必須保證調用功能函數前有至少30Bate的棧空間。
本程序參考飛思卡爾公司提供的《在 HCS08 微控制器上使用 FLASH 存儲器模擬 EEPROM》。並在源程序的基礎上精簡了部分功能,減少了RAM使用量。並嘗試使用分頁機制確定EEPROM地址。
介面函數的EEPROM地址定址由頁地址和頁內偏移量組成。即把用戶定義的EEPROM分為若干個大小為256位元組的頁。其地址與FLASH地址的換算關系為:
FLASH真實地址=EEPROM空間起始地址+頁地址×256+頁內偏移地址
用戶在使用EEPROM是只用確定數據保存在EEPROM的相對地址即可。介面函數原型為:
EEPROM_WRITE_DATA(數據,頁地址, 頁內偏移地址);
Char EEPROM_READ_DATA(頁地址, 頁內偏移地址);

1. 程序流程分析與設計。
由於S08系列單片機在Flash寫入時序中不能進行任何的Flash讀操作,Flash寫入指令必須放到RAM中執行並關閉所有可屏蔽中斷。程序流程如圖13-1-?。

位元組寫入/.全擦除程序流程 位元組讀取程序流程
圖13-1-?
2.程序源代碼。此程序在CodeWarrior 6.0繼承編譯環境中編譯通過

/*****************************************************/
//河南工業大學Freescale MCU&DSP聯合實驗室
// 文件名:flash_program.h
// CPU :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 調試環境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述: 頭文件,用於保存初始化EEPROM設定、用戶定製參數、編譯器參數等信息。
/*****************************************************/
#include <hidef.h>
#include "derivative.h"
#include <stdio.h>

/*************flash編程指令(請勿改動)*****************/
#define BLACK_CHECK 0x05 //查空指令
#define BITE_PROGRAM 0x20 //位元組編程指令
#define BURST_PROGRAM 0x25 //快速編程指令
#define PAGE_ERASE 0x40 //頁擦除指令(1頁=512位元組)
#define MASS_ERASE 0x41 //全擦除指令

/******用戶定製參數(根據單片機型號和用戶flash使用情況定製)**********/
#define EEPROM_START_ADDRESS 0xE000 //EEPROM區起始地址。512B的倍數
#define EEPROM_PAGE_NUM 8 //EEPROM頁數。1page=256B
#define BUS_FREQUENCY 2000 //匯流排頻率。單位(KHz)

/********************編譯器相關參數**************************/
#define INT8U unsigned char //無符號位元組變數。根據編譯器更改。默認CodeWarrior 6.0
#define INT16U unsigned short int //無符號字變數。根據編譯器更改。默認CodeWarrior 6.0
/***********EEPROM API函數原型***********/
//初始化程序。此函數必須在使用EEPROM前調用。建議用戶在系統初始化是調用。
void INIT_EEPROM(void);
//EEPROM擦除函數。擦除所有EEPROM數據。
void EEPROM_ERASE(void);
//EEPROM位元組寫入函數。寫入一個位元組到EEPROM指定區域。
void EEPROM_WRITE_DATA(INT8U data,INT8U EEPROM_page,INT8U offset_address)
//EEPROM讀出函數。讀出一個指定的區域所保存的位元組的到函數返回值。
char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address);
/****************************END************************************/

/*****************************************************/
//河南工業大學Freescale MCU&DSP聯合實驗室
// 文件名:flash_program.c
// C P U :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 調試環境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述:提供了一個初始化函數和三個功能函數供用戶調用,沒有可更改參數。
/*****************************************************/
#include "flash_program.h"

const INT8U FLASH_CODE[]={ // ; flash操作代碼
0x45, 0x18, 0x26, // LDHX #$1826 ; FCMD地址寫入H:X
0xA6, 0x00, // LDA #$00 ; 0x00為命令佔位符
0xF7, // STA ,X ; 將命令寫入FCMD命令緩存器
0x5A, // DECX ; 指針指向 FSTAT
0xF6, // LDA ,X ;
0xAA, 0x80, // ORA #$80 ;
0xF7, // STA ,X ; 置位FSTAT_FCBEF。啟動flash寫入命令
0xF6, // LDA ,X ; 等待3個時鍾周期(請勿刪除此代碼)
0xF6, // LDA ,X ; 讀取FSTAT
0xA5, 0x30, // BIT #$30
0x26, 0x05, // BNE *+6 ; 錯誤則返回
//LOOP
0xF6, // LDA ,X ; 等待寫操作結束
0xA5, 0x40, // BIT #$40
0x27, 0xFB, // BEQ *-3 ; 跳轉到LOOP
//EXIT:
0X81 //RTS ; 返回
};
/*********************初始化函數**********************************/
#if BUS_FREQUENCY >= 12000
void INIT_EEPROM(void){FCDIV=(((BUS_FREQUENCY/(8*175)))|0x40)-1;}
#endif
#if BUS_FREQUENCY < 12000
void INIT_EEPROM(void){FCDIV=(BUS_FREQUENCY/175)-1;}
#endif

/***********************EEPROM位元組寫入函數****************************/
void EEPROM_WRITE_DATA(INT8U data,INT8U EEPROM_page,INT8U offset_address)
{

INT16U address; //存放寫入地址
INT8U code_space[23]; //初始化代碼空間

if(EEPROM_page>=EEPROM_PAGE_NUM)return; //地址錯誤返回,保護用戶代碼
address=offset_address+EEPROM_page*256+EEPROM_START_ADDRESS; //地址轉化
(void)memcpy(code_space,FLASH_CODE,23); //復制flash操作代碼到RAM

code_space[4] = BITE_PROGRAM; //修改命令佔位符為寫入命令

DisableInterrupts; //關中斷
if (FSTAT&0x10){ //清錯誤標志
FSTAT = FSTAT|0x10;
}
_asm
{ //寫入初始化
LDHX address;
LDA data;
STA ,X; //寫入緩存
TSX;
JSR 2,x; //跳入RAM執行
}
EnableInterrupts; //開中斷
__RESET_WATCHDOG();
}

/********************EEPROM字讀取入函數********************************/
char EEPROM_READ_DATA(INT8U EEPROM_page,INT8U offset_address){

unsigned short int address; //地址變數
char rusult; //數據變數
address=offset_address+EEPROM_page*0x100+EEPROM_START_ADDRESS; //地址轉換
asm{
LDHX address;
LDA ,X; //讀取地址到數據變數
STA rusult;
}
__RESET_WATCHDOG();
return(rusult); //返回
}

/**********************EEPROM擦除函數********************************/
void EEPROM_ERASE(void)
{
INT16U address;
INT8U i; //循環變數
INT8U code_space[23];

for(i=0;i<(EEPROM_PAGE_NUM/2);i++){ //分頁擦除

address=i*0x200+EEPROM_START_ADDRESS;

(void)memcpy(code_space,FLASH_CODE,23); //復制flash操作代碼到RAM

code_space[4] = PAGE_ERASE; //修改命令佔位符為擦除命令

DisableInterrupts; //關中斷

if (FSTAT&0x10){ //清錯誤標志
FSTAT = FSTAT | 0x10;
}
_asm
{
LDHX address; //擦除地址寫入緩存
STA ,X;
TSX;
JSR 3,x; //跳入RAM執行
}
EnableInterrupts; //開中斷
__RESET_WATCHDOG();
}
}
/****************************END************************************/

/*****************************************************/
// 版權所有(c)河南工業大學
// 文件名:mian.c
// C P U :MC9S08AW60
// 版 本:v1.0
// 日 期:2008年8月12日
// 調試環境:CodeWarrior 6.0
// 作 者:曾 滔
// 描 述: 測試Flash模擬EEPROM程序。
/*****************************************************/
#include <hidef.h>
#include "derivative.h"
#include "flash_program.h"

void main(void){
char temp;
PTADD=0XFF;

INIT_EEPROM(); //初始化Flash控制寄存器。
do{
EEPROM_WRITE_DATA(88,0,0); //寫入一個位元組。
temp=EEPROM_READ_DATA(0,0); //讀取一個位元組
}while(temp!=88); //若寫入失敗則再次寫入
PTAD_PTAD0=1;

do{
EEPROM_ERASE();
}while(EEPROM_READ_DATA(0,0)!=0xff); //擦除Flash

PTAD_PTAD1=1;
for(;;)__RESET_WATCHDOG(); //死循環
}

❻ 字元串輸入%s 和char不匹配 pta的題,在codeblocks上可以運行但是報警告在提交代碼報編譯錯誤

char 對應 %c

~~~~~~~~~~~~

❼ 這個程序在DEV C++上可以運行並出現正確結果 但是提交到PTA就會報錯!請賜教!

當 C 語言程序能夠正常編譯並運行,但可能結果可疑或不對時,即,當程序沒有語法錯誤而可能有邏輯錯誤時,就需要考慮使用調試Debug功能來找出程序的 bug。



在調試過程中,可以讓程序運行到設置好的斷點處並暫停下來,然後通過觀察相關的變數值是否正確,來判斷程序的邏輯錯誤可能出現在哪裡。



本文以 Dev-C++ 5.11 開發環境為例來說明 C 語言的調試方法。



閱讀全文

與pta編譯錯誤怎麼解決相關的資料

熱點內容
程序員放棄後會怎樣 瀏覽:188
河北模具編程 瀏覽:190
adb查找命令 瀏覽:324
安卓手機視頻文件夾怎麼打開 瀏覽:314
平板加密手機後怎麼關閉 瀏覽:572
流媒體伺服器應該注意什麼 瀏覽:539
d8命令編譯 瀏覽:969
壓縮包解壓需要多少空間 瀏覽:152
如何查找app屬性 瀏覽:392
android人臉識別技術 瀏覽:327
pc104編程 瀏覽:338
二維碼反編譯破解推廣 瀏覽:687
修改伺服器的mac地址 瀏覽:531
好玩的編程軟體 瀏覽:903
編程語言創始人有錢嗎 瀏覽:809
短視頻app怎麼獲客 瀏覽:18
查看雲伺服器的應用 瀏覽:441
javadump工具 瀏覽:569
程序員16g 瀏覽:449
程序員沒有辦法成為top怎麼辦 瀏覽:224