C- While循环不起作用

时间:2016-10-27 18:03:17

标签: c while-loop

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

int main(void)
{
    char str1[1000];
    int i, letter, space = 0;
    char ch = str1[i];

    printf("Enter a sentence: ");
    scanf("%[^\n]s", str1);
    printf("you enter %s\n", str1);

    while (i != strlen(str1)) {
        if (ch != ' ') {
            letter++;
        } else if (ch = ' ') {
            space++;
        }
        i++;
    }
    printf("%d %d", letter, space);
}

我的while循环不起作用,我似乎无法找到问题所在。我在ubuntu中使用终端,在打印用户字符串后,我得到一个空行。我必须使用Ctrl-Z来停止脚本。

4 个答案:

答案 0 :(得分:7)

我发现错误:使用未初始化的变量 - 本地变量不会自动初始化。

另一个是你没有从循环中的字符串中读取字符。

第三个是不必要且语法不正确的if (ch=' ')应该是if (ch==' ')

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

int main(void){
    char str1[1000];
    int i = 0, letter = 0, space = 0;       // initialise all to 0;

    printf("Enter a sentence: ");
    scanf("%[^\n]s",str1);
    printf("you enter %s\n",str1);

    while (i!=strlen(str1)){
        char ch = str1[i];                  // move this inside the loop
        if (ch!= ' '){
            letter++;
        }else {                  // unnecessary - you already checked space
            space++;
        }
        i++;
    }
    printf("%d %d\n", letter, space);
}

计划会议:

Enter a sentence: hallo my friend
you enter hallo my friend
13 2

答案 1 :(得分:2)

您需要在程序开头将i初始化为0。

int i,letter,space = 0;

上面的行只会将空格设置为0而不是i。

答案 2 :(得分:0)

这应该有效:

int i = 0;
int letter = 0;
int space = 0;
char ch = ' ';

printf("Enter a sentence: ");
scanf("%[^\n]s",str1);
printf("you enter %s\n",str1);

while (i!=strlen(str1)){
   ch = str1[i];
   if (ch!= ' '){
          letter++;
   } else {
         space++;
   }
   i++;
 }

答案 3 :(得分:0)

在进入循环之前,您需要将i初始化为0if (ch=' ')也应为if (ch==' ')。下次尝试编译并启用警告(-Wall -Wextra)。

此外,尽管可能与此处的问题无关,但如果字符串太长,则在strlen()语句的条件下使用while可能会导致性能问题。此外,请注意,如果输入字符串太长,scanf()函数可能会写入缓冲区的末尾。对于这种特殊情况,我建议使用getline()获取字符串(动态分配必要的缓冲区)。