为什么这段代码在 C++ 的第一个循环中省略了第二个单词
Why this code ommit the second word in the first loop in c++
我不知道为什么编译器 "skip" 第二个词,如果我将 ile
设置为 1
,我输入第一个句子,它会自动跳过第二个,但是如果我将 ile
设置为任何其他 >1
,我可以输入两个单词。
任务是检查单词之间是否是回文。
我试图用循环的 getchar 替换它,但工作方式与下面相同。
我的代码:
#include <iostream>
#include <string.h>
using namespace std;
void qsort(char tab[], int min, int max)
{
if(min<max)
{
int min_min = min;
for(int i=min+1;i<=max;i++)
{
if(tab[i]<tab[min])
{
swap(tab[++min_min],tab[i]);
}
}
swap(tab[min],tab[min_min]);
qsort(tab,min,min_min-1);
qsort(tab,min_min+1,max);
}
}
bool sprawdz(char tab[],char tab2[])
{
for(int i=0;i<strlen(tab);i++)
{
if(tab[i]!=tab2[i])
{
return false;
break;
}
}
return true;
}
int main()
{
char tablica1[100];
char tablica2[100];
int ile;
cin>>ile;
for(int i=0;i<ile;i++)
{
cin.getline(tablica1, 100);
cin.getline(tablica2, 100);
qsort(tablica1,0,strlen(tablica1)-1);
qsort(tablica2,0,strlen(tablica2)-1);
cout<<tablica1<<endl<<tablica2;
if(sprawdz(tablica1,tablica2))
{
cout<<"TAK";
}
else
{
cout<<"NIE";
}
}
return 0;
}
改变这个:
cin.getline(tablica1, 100);
cin.getline(tablica2, 100);
收件人:
cin.getline(tablica1, 100);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.getline(tablica2, 100);
原因是cin在输入流中留下了一个换行符。你必须使用 cin.ignore() 来删除它。
此外,您需要 #include <limits>
numeric_limits
。
可以参考这个答案加深理解:
我不知道为什么编译器 "skip" 第二个词,如果我将 ile
设置为 1
,我输入第一个句子,它会自动跳过第二个,但是如果我将 ile
设置为任何其他 >1
,我可以输入两个单词。
任务是检查单词之间是否是回文。 我试图用循环的 getchar 替换它,但工作方式与下面相同。
我的代码:
#include <iostream>
#include <string.h>
using namespace std;
void qsort(char tab[], int min, int max)
{
if(min<max)
{
int min_min = min;
for(int i=min+1;i<=max;i++)
{
if(tab[i]<tab[min])
{
swap(tab[++min_min],tab[i]);
}
}
swap(tab[min],tab[min_min]);
qsort(tab,min,min_min-1);
qsort(tab,min_min+1,max);
}
}
bool sprawdz(char tab[],char tab2[])
{
for(int i=0;i<strlen(tab);i++)
{
if(tab[i]!=tab2[i])
{
return false;
break;
}
}
return true;
}
int main()
{
char tablica1[100];
char tablica2[100];
int ile;
cin>>ile;
for(int i=0;i<ile;i++)
{
cin.getline(tablica1, 100);
cin.getline(tablica2, 100);
qsort(tablica1,0,strlen(tablica1)-1);
qsort(tablica2,0,strlen(tablica2)-1);
cout<<tablica1<<endl<<tablica2;
if(sprawdz(tablica1,tablica2))
{
cout<<"TAK";
}
else
{
cout<<"NIE";
}
}
return 0;
}
改变这个:
cin.getline(tablica1, 100);
cin.getline(tablica2, 100);
收件人:
cin.getline(tablica1, 100);
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.getline(tablica2, 100);
原因是cin在输入流中留下了一个换行符。你必须使用 cin.ignore() 来删除它。
此外,您需要 #include <limits>
numeric_limits
。
可以参考这个答案加深理解: