代码是在运行时输入字符串,但是代码接受的字符串比提到的字符串n少一个?错误在哪里?
假设n = 3,但循环只运行两次,即n-1次,因此只需要两个字符串作为输入
int main(){
int n;
cin>>n;
char str[n][100];
for(int i=0;i<n;i++)
{
char c;
int j=0;
while((c=getchar())!='\n')
{
str[i][j++] = c;
}
str[i][j] ='\0';
}
}
答案 0 :(得分:0)
正在读取\n
返回字符(从填充n
开始)并将第一个字符串清空。在输入结束的第一次测试之前再做另一个getchar()
以摆脱它。
为了获得稳健性,您还可以尝试:cin.ignore(INT_MAX);cin.clear();cin.sync();
。
示例(我的编译器不喜欢你的语法的一部分所以我不得不重做它,专注于新的getchar
:
int main() {
int n;
cin >> n;
char** str = new char*[n];
for (int i = 0; i < n; i++)
str[i] = new char[100];
getchar();
for (int i = 0; i<n; i++)
{
char c;
int j = 0;
while ((c = getchar()) != '\n')
{
str[i][j++] = c;
}
str[i][j] = '\0';
}
for (int i = 0; i < n; i++)
delete[] str[i];
delete[] str;
}
(是的,我知道我距离http://wiki.c2.com/?ThreeStarProgrammer一星级,只是这样做才能回答这个问题。)