current position:Home>C + + I really want to ask this question, because it has been like this many times: the output part of the PTA question is placed in the main function and the user-defined function, and the result is different

C + + I really want to ask this question, because it has been like this many times: the output part of the PTA question is placed in the main function and the user-defined function, and the result is different

2022-01-27 01:11:28 CSDN Q & A

The title is as follows :

img

My initial code was :

#include <bits/stdc++.h>using namespace std;void strmcpy(char *s,char *t,int m){    int i=m-1;    for(i=m-1;t[i]!='\0';i++)    {        *(s+i)=*(t+i);    }}int main(){    int repeat,m,i,len;    char a[1000],b[1000];    char *s=a,*t=b;    cin>>repeat;    for(i=repeat;i>0;i--)    {        getchar();        cin.getline(b,1000);        len=strlen(b);        cin>>m;        if(len<m)        {            cout<<"error input"<<endl;            continue;        }        strmcpy(s,t,m);        for(i=m-1;i<len;i++)        {            cout<<*(s+i);        }        cout<<endl;    }    return 0;}

It turned out to be like this :

img


That is, it didn't stop after two times , Go on

Later it was changed to :

#include <bits/stdc++.h>using namespace std;void strmcpy(char *s,char *t,int m){    int i=m-1;    for(i=m-1;t[i]!='\0';i++)    {        *(s+i)=*(t+i);    }    for(i=m-1;i<strlen(t);i++)        {            cout<<*(s+i);        }        cout<<endl;}int main(){    int repeat,m,i,len;    char a[1000],b[1000];    char *s=a,*t=b;    cin>>repeat;    for(i=repeat;i>0;i--)    {        getchar();        cin.getline(b,1000);        len=strlen(b);        cin>>m;        if(len<m)        {            cout<<"error input"<<endl;            continue;        }        strmcpy(s,t,m);    }    return 0;}

It turned out to be like this :

img

I really want to understand
just “ A block of code that controls the output ” Is it different if you change your position




Refer to the answer 1:

You have entered wrong
What people input is 3, Why did you enter 2




Refer to the answer 2:



Refer to the answer 3:

In the final analysis, code functions are not read, explained or annotated by others ; Instead, it is analyzed step by step or set breakpoints, or display the intermediate results obtained at a certain step or write them to the log file step by step .
remind : Again cow × Teachers can't replace students to understand and go to the bathroom !
Single step debugging and breakpoint setting debugging (VS IDE After the connection is compiled in , Press F10 or F11 Key single step , Press Shift+F11 Exit the current function ; Press on a line F9 Press... After setting the breakpoint F5 Execution stops at this breakpoint .) Is one of the skills that programmers must master .




Refer to the answer 4:



Refer to the answer 5:

strmcpy() This sentence in the function *(s+i)=*(t+i); It's wrong. ,s Should be from 0 Let's get started , Revised as follows , For reference :

#include <iostream>//#include <bits/stdc++.h>using namespace std;void strmcpy(char* s, char* t, int m){    t += m - 1;    while(*t) *s++ = *t++;    *s = '\0';}int main(){    int repeat, m, i, len, k = 0;    char a[1000], b[1000];    char* s = a, * t = b;    cin >> repeat;    for (i = repeat; i > 0; i--)    {        getchar();        cin.getline(b, 1000);        len = strlen(b);        cin >> m;        if (len < m)        {            i == 1 ? cout << "error input" : cout << "error input" << endl;        }else{            strmcpy(s, t, m);            i == 1 ? cout << s : cout << s << endl;        }    }    return 0;}



Refer to the answer 6:

copyright notice
author[CSDN Q & A],Please bring the original link to reprint, thank you.
https://en.cdmana.com/2022/01/202201270111257307.html

Random recommended