A. 求助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;
}
B. 在PTA上做題scanf函數總是出現這樣的問題,請高手指教
這個代碼在其它在線編譯的網站是可以正常運行的,可能跟默認的編譯器設置有關。你這個警告應該是指scanf的返回值沒有使用,你可以把scanf的結果賦下值試試,如下代碼:
intr=scanf("%d%d%d%d",&a,&b,&c,&d);
其它網站執行結果正常
另外PTA的讀者驗證碼從哪裡得到?
C. eBPF on android之編譯內核與打補丁(解決觸摸和WIFI失效問題)
本文為看雪論壇優秀文章
看雪論壇作者ID:seeeseee
一、前言在之前嘗試ptach內核時,配置CONFIG_KRETPROBES後遇到了觸摸和WIFI失效的問題。後經missking指導,發現修改內核編譯選項的操作不正確。正確的步驟如下:
但即便如此,編譯出的內核仍然導致觸摸和WIFI失效。後續參考多個帖子,解決了觸摸問題,但WIFI問題未能解決。
刷自編譯內核導致的觸摸屏失靈問題、正確的自編譯內核操作及解決觸摸屏問題的步驟、內核編譯問題、單獨編譯內核的方法、解決觸摸屏失靈問題的實踐篇、內核編譯內文以及相關補丁操作等,均被提及。在一系列操作後,觸摸功能得以修復,但WIFI問題仍然懸而未決。
經過進一步探索,發現單獨編譯內核且包含boot.img的正確方式,這與之前的操作有所區別。對於BUILD_BOOT_IMG的設定和其中的GKI_RAMDISK_PREBUILT_BINARY、VENDOR_RAMDISK_BINARY的理解,以及boot.img解包和生成所需文件的過程,都有了更深入的了解。
通過分析build/build.sh腳本,明確當BOOT_IMAGE_HEADER_VERSION為3時,需指定GKI_RAMDISK_PREBUILT_BINARY和KERNEL_VENDOR_CMDLINE。解包boot.img後,根據文件信息調整BUILD_BOOT_IMG、BASE_ADDRESS、PAGE_SIZE、KERNEL_CMDLINE和KERNEL_BINARY的值,確保正確生成initramfs.cpio和VENDOR_RAMDISK_BINARY。補丁添加bpf_probe_read_user功能,確保內核能正常讀取用戶空間數據。
進行內核編譯配置調整,包括修改內核編譯配置選項,確保觸摸屏和WIFI功能正常。操作步驟包括進入內核源碼目錄、生成floral_defconfig、打開內核編譯配置界面、保存並退出配置、覆蓋floral_defconfig文件、刪除.config文件等。最終,通過正確編譯命令生成可正常使用的boot.img文件,解決觸摸屏和WIFI失效問題。
二、環境搭建環境時,請根據需要添加代理連接。首先,根據官方指南安裝所需庫和軟體,並創建工作目錄。選擇與手機內核版本對應的分支(如Pixel 4XL對應的android-msm-coral-4.14-android13),同步內核源代碼並使用官方說明操作。注意,如果沒有設置編譯工具,可手動同步代碼或使用官方提供的工具。
三、步驟操作步驟包括:
通過解決觸摸屏失靈和WIFI失效問題,了解到單獨編譯內核並生成boot.img的正確方法。在內核編譯過程中,明確相關選項和參數的重要性,確保生成的內核能正常運行觸摸和WIFI功能。通過實踐操作,內核可實現正常啟動、觸摸和WIFI功能正常,同時支持eBPF設定。
D. 這個程序在putty里編譯就可以運行,但不知道為什麼在浙大的PTA平台上不可以。求解答,謝謝大家。
答案錯誤,不是程序編譯不了,仔細審題,肯定你的程序在輸入輸出上面和要求不符合。
E. 這個程序在DEV C++上可以運行並出現正確結果 但是提交到PTA就會報錯!請賜教!
當 C 語言程序能夠正常編譯並運行,但可能結果可疑或不對時,即,當程序沒有語法錯誤而可能有邏輯錯誤時,就需要考慮使用調試Debug功能來找出程序的 bug。
在調試過程中,可以讓程序運行到設置好的斷點處並暫停下來,然後通過觀察相關的變數值是否正確,來判斷程序的邏輯錯誤可能出現在哪裡。
本文以 Dev-C++ 5.11 開發環境為例來說明 C 語言的調試方法。
准備工作
菜單:工具/編譯選項
Tools/Compiler Options
在「設定編譯器配置」Compiler set to configure中選擇「TDM-GCC 4.9.2 64-bit Debug」。
提示:
如果是 32 位的系統,請選擇「TDM-GCC 4.9.2 32-bit Debug」。
在下方的「編譯器」General選項卡中,勾選「編譯時加入以下命令:」Add the following commands when calling the compiler:,並在其中輸入「-g」。如上圖所示。
確定退出後,可在軟體界面右上角看到或選擇用於調試的編譯器。
設置斷點
斷點breakpoint,指的是在調試過程中程序運行到此行代碼前會臨時停下,以便觀察此時的某些變數值。
可通過點擊代碼左側的行號來設置斷點。
或在某行代碼上右擊,選擇「切換斷點」Toggle Breakpoint。
或者使用快捷鍵:F4。
同樣的方法也可用於取消斷點設置。
斷點設置建議:
設置在 scanf 等輸入語句的下一行,以觀察數據是否被正確獲得。
設置在循環語句的下一行,以觀察循環控制變數在循環結束後的值,或者為了避免調試過程中在循環語句段反復點擊「下一步」按鈕。
設置在函數調用語句的下一行,以觀察函數返回的結果值是否正確。
開始調試
在開始調試前,一般要先編譯。
菜單:運行/編譯
Execute/Compile
快捷鍵:F9
確保沒有語法錯誤之後,再開始調試。
菜單:運行/調試。
Execute/Debug
快捷鍵:F5
或者,點擊工具欄上的「」按鈕。
添加查看
開始調試後,代碼將按照常規順序依次運行。執行到第一個斷點時,才臨時停止,紅色行變成藍色行,代表即將要執行的代碼行。
此時,可將滑鼠指針懸浮於某個變數之上,以查看此時該變數的值。
提示:
對於字元變數,會同時顯示字元的 ASCII 碼值。
或者,在變數上右擊,選擇「添加查看」Add watch,會自動將此變數添加到左側的調試Debug面板中,以便後續跟蹤查看。
提示:
在變數名上雙擊,可精準選中變數。
或者,點擊左下方的「添加查看」Add watch按鈕,手動添加要查看的變數。
繼續或停止調試
可以使用相關按鈕繼續調試工作。
下一步Next line按鈕
運行下一行代碼。如果下一行代碼是對函數的調用,不進入函數體。
快捷鍵:F7
類似於 Turbo C++ 中的「Step Over」。
跳過Continue按鈕
直接運行到下一個斷點處。
單步進入Into function按鈕
運行下一行代碼,如果下一行是對函數的調用,則進入函數體內逐行運行。
快捷鍵:F8
類似於 Turbo C++ 中的「Trace」。
跳過函數Skip function按鈕
當在函數內部時點擊此按鈕,將直接運行到函數結束,並返回到函數調用處。
停止執行Stop Execution按鈕
停止調試,清除所有添加好的查看watch。
快捷鍵:F6
說明:
下一條語句Next instruction按鈕和進入語句Into instruction按鈕,常結合CPU窗口查看並執行指令。一般的調試工作中可以不用。