C语言中 while ((str[i]=getchar())!='\n')没用

C语言中 while ((str[i]=getchar())!='\n')没用如图,run的时候,输入m并打下空格后,直接就是这样了,不知道为什么while那里本来该有的字符数组的输入没用了。
我试过,如果'n'换成别的字符都有用,为什么'n'没有用,求教大神,谢谢了。

答: while ((str[i]=getchar())!='\n') 中(str[i]=getchar()) 的作用是取得 getchar() 函数的返回值,并非为字符数组 str[80]赋值,而函数 getchar() 的返回值是int类型,所以用字符数组取得返回值本身就是错误的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-04-21
1、要先输入字符串,再输入字符。
2、i对应各个字符,str[i]='\0'就把最后一个字符去掉了,如果恰恰是要找的字符怎么办?
3、index=i了,那么,idex还怎么等于i+1?
逻辑错误太多,程序混乱,不是换某个字符就能解决问题的,是巧合倒有可能。追问

不不不不不

你看我旁边运行的结果

它根本没有让我输入字符数组

我输入m之后,Input直接就接Not Found

追答

你的程序代码:char str[80]
str[80]就是一个长度为80的字符数组。
因为你的程序逻辑错误,所以没有让你输入字符数组,直接出N了。

追问

那你能不能帮我看看,现在为什么还是错的

大神啊,拜托了

追答

当然了,我指出的这个程序的逻辑错误一个没改,当然还是不对了。

追问

我改了呀

我们书上就是这么输入的呀

还有,第I个不是空格吗

追答

这张图片和你题目里写的有关系吗?图片里的程序是输入一串数字字符,转为整数输出。

第2个回答  2018-04-21
#include <stdio.h>

int main()
{
    int i = 0, index = 0;
    char ch;
    printf("Input a character: ");
    ch = getchar();
    getchar();            //    过滤掉你输入ch时输入的回车字符 
    
    char str[80];    
    printf("Input a string: ");
    while( (str[i]=getchar()) != '\n')
        i++;
    str[i] = '\0';
    
    for(i = 0; str[i]!='\0'; ++i)
    {
        if(str[i] == ch)
        {
            printf("index = %d\n", i+1);
            break;
        }
    }
    if(str[i]=='\0')
        printf("Not Found!\n");
    return 0;
}

追问

是这样么,可我还是不行

追答是不是你想要的效果?

追问

你是怎么弄的

追答

我在代码的注释里写了,你看看

追问

哦,就是因为输入ch的时候会有一个回车对吧

啊啊啊啊,就因为这个

好了

非常感谢

本回答被提问者采纳
第3个回答  2018-04-21
卧槽好深奥啊
相似回答