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窗口查看并执行指令。一般的调试工作中可以不用。