对于循环长度问题

问题描述 投票:1回答:1

代码是在运行时输入字符串,但代码接受的字符串是否比上面提到的大小为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'; 
  }
} 
c++ arrays string c++11 for-loop
1个回答
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只有一星级,只是为了回答这个问题。)

© www.soinside.com 2019 - 2024. All rights reserved.