停止for循环

时间:2016-10-11 14:56:55

标签: c for-loop cs50

我有一个家庭任务编写一个程序,用户输入他的姓名和输出,输出应该是首字母。 问题是应用这个程序我会得到一行重复10次的首字母。

如何才能获得一对首字母的输出?

我已经搜索了网站和本网站,并尝试应用返回和休息等内容,但这对我没有帮助。

以下是代码:

#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main (int argc, string argv[])
{
    // get string of the text
    string s = GetString();

    // output the initials of the name
    if (s != NULL)
        for (int i = 0; i < argc; i++)  // was for (…; i = 0)
        {
            for (int j = 0, n = strlen(argv[i]); j < n; j++)  // was for (…; j = 0)
            {
                printf ("%c%c", argv[1][0], argv[2][0]);
            }
            return 0;
        }
}

2 个答案:

答案 0 :(得分:2)

这是无限循环,因为i和j被重新分配为0。 &#34; for循环&#34;结构应该像: for(init; condition; increment) 请使用以下&#34; for loop&#34;在你的程序中。

for (int i = 0; i < argc; i++)
{
   for (int j = 0, n = strlen(argv[i]); j < n; j++)

获取Name的首字母。将输入(名称)作为String并查找字符串的长度(length_of_input)并使用以下代码:

for(int i=0; i< (length_of_input-1); i++){
 //First letter is always initial
   if(i==0){
       // print character at i position
        printf ("%c",name[i]);
    }
   //if there is space, then next character is initial
   if(name[i] == ' '){
         printf ("%c",name[i+1]);  //print next character
    }
}

答案 1 :(得分:1)

你的内循环永远不会完成,因为永远不会达到停止条件。

for (int j = 0, n = strlen(argv[i]); j < n; j = 0)

你很可能意味着

for(int j = 0, n = strlen(argv[i]); j < n; j++)

正如Varsha所指出的,外环也存在同样的问题。似乎你需要梳理你对C循环的了解:))