对于循环长度问题

时间:2017-12-17 19:37:42

标签: c++ arrays string c++11 for-loop

代码是在运行时输入字符串,但是代码接受的字符串比提到的字符串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'; 
  }
} 

1 个答案:

答案 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一星级,只是这样做才能回答这个问题。)