采用指针计数,但是程序返的数字一直是1


#include
using namespace std;
int main()
{
    char *p;
    char a[100];
    p=a;
    gets(a);
    int t;
    while(*p!='\0')
    {
        t=0;
        if((*p>'a'&&*p<'z')||(*p>'A'&&*p<'Z'))
        ;
        else
        t++;
        p++;
    }
    cout<<"非英文字符的个数是"<return 0; 
 } 

参考GPT和自己的思路:

这个问题的原因是变量t只在while循环中声明和赋值,每次循环完毕后变量t的值就被清零了,导致最终输出的t的值一直是0或1。

通过将变量声明和赋值移动到while循环外部,可以解决这个问题,代码如下:


#include<iostream>
using namespace std;
int main()
{
    char *p;
    char a[100];
    p=a;
    int t = 0; // 将变量声明并初始化放到while循环之前
    gets(a);
    while(*p!='\0')
    {
        if((*p>'a'&&*p<'z')||(*p>'A'&&*p<'Z'))
        ;
        else
        t++;
        p++;
    }
    cout<<"非英文字符的个数是"<<t;
    return 0; 
 } 

这样输出的t就是正确的非英文字符的个数了。

参考GPT和自己的思路:

你好!针对你提出的问题,代码中存在一些逻辑错误,导致程序输出的数字一直是1。具体的问题如下:

  1. 变量t应该在while循环外部进行定义,并且赋初值为0。如果在while循环内部定义,每次循环时都会将t赋值为0,导致最终输出的t值为1。

  2. 在判断非英文字符时,else后面的代码t++是错误的。因为t++的作用是将t的值加1,但是t定义为int类型,所以在if语句内部对t的修改并没有作用于while循环外部,需要将t++修改成t=1,将t的值赋为1,用于计数。

修改后的代码如下:


#include<iostream>
using namespace std;
int main()
{
    char *p;
    char a[100];
    p=a;
    gets(a);
    int t=0;
    while(*p!='\0')
    {
        if((*p>'a'&&*p<'z')||(*p>'A'&&*p<'Z'))
        ;
        else
        t=1;
        p++;
    }
    cout<<"非英文字符的个数是"<<t;
    return 0; 
 } 

希望能够帮助到你,有任何疑问可以随时向我提出。