关于#c++#的问题,请各位专家解答!


#include
#include
#include
using namespace std;
#define Maxsize 100
int main()
{
    int i, j = 0;
    char str[Maxsize]; char p[Maxsize];
    gets_s(str,2);
    for (i = 0; str[i] != '\0'; i++)
    {
        while (isdigit(str[i]))
        {
            p[j++] = str[i++];
        }
        for (i = 0; i < 10; i++)
        {
            cout << p[i];
        }
    }
}

想了半天了为什么?输入11总会显示错误

img

因为输了2位,而你gets_s缓冲区就是2,还有\0呢,修改为gets_s(str, Maxsize-1);

  • 循环里面尽量不要乱嵌套,判是否数字,并找出数字存入p,在一个循环里完成即可; 最后打印输出p,也用一个循环;这些独立出来,程序运行就清晰了
  • 参考如下修改:
 
#include<iostream>
#include<stack>
#include<stdio.h>
using namespace std;
#define Maxsize 100
int main()
{
    int i, j = 0;
    char str[Maxsize]; char p[Maxsize];
    gets(str);
    for (i = 0; str[i] != '\0'; i++)
    {
        if (isdigit(str[i]))
        {
            p[j++] = str[i];
        }
    }
    p[j] = '\0';
    for (j = 0; p[j] != '\0'; j++)
    {
        cout << p[j];
    }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/259860
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++ 给定当前的时间,用英文的读法将它读出来 问题解决代码
  • 除此之外, 这篇博客: 【C++必知必会】异常处理机制,你了解多少?中的 🔋示例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    看个小例子就能理解了

    #include <iostream>
    #include <string> 
    using namespace std;
    class myClass{
    public:
    	myClass(string name) {
    		m_name = name;
    		cout<< m_name << "对象被创建了!" << endl; 
    	}
    	~myClass() {
    		cout<< m_name << "对象被析构了!" << endl; 
    	}
    	string m_name;	
    };
    void func1(){
    	myClass b("b");
    	myClass c("c");
    	throw -1; // 函数1抛出异常 
    }
    void func2() {
    	myClass a("a");
    	func1(); // 调用函数1
    }
    int main()
    {
    	try {
            func2(); // 调用函数2 
        }
    	catch(int) {
            cout << "这里是异常处理!" << endl;
        }
    	return 0;
    }
    

    运行结果为:



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^