首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修正“错误:将数组类型赋值给表达式”?

如何修正“错误:将数组类型赋值给表达式”?
EN

Stack Overflow用户
提问于 2018-09-06 11:58:00
回答 4查看 3.9K关注 0票数 0

我收到一个错误:

错误:将数组类型赋值给表达式

在这个程序中,应该打印有4-8个字母的单词:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char rec[300];
   int zbroj1=0, br=0, zbroj2=0;

   while((rec=getchar()) != '\n')
   {
     zbroj1++;
   }
   if(zbroj1>=4 || zbroj1<=8)
    printf("Nova recenica je: %s", zbroj1);

   return 0;
}

我怎么才能解决这个问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-06 12:46:24

下面是打印大小为>= 4和<= 8的单词的代码

代码语言:javascript
复制
#include<stdio.h>

int main(void) {
    char rec[9];   //you may need to adjust the buffer according to the size of the words
    int br=0, zbroj2=0;

    while((zbroj2=getchar()) != '\n') {
        if(br < 8)
            rec[br] = zbroj2;    // we are not going to store the words having length more than 8
        br++;
        if(zbroj2 == 32){
            if(br>4 && br<=8){
                rec[br] = '\0';
                printf("Nova recenica je: %s\n", rec);
            }
            br = 0;
        }
    }
    if(br>=4 && br<=8){    // This check is to catch the last word
        rec[br] = '\0';
        printf("Nova recenica je: %s\n", rec);
    }
    return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2018-09-06 12:06:45

这就是错误的来源..。

代码语言:javascript
复制
rec=getchar()

...as recchar的数组,getchar()int的形式返回字符。使用未使用的变量br来存储返回值,使用计数器变量zbroj1作为索引存储到数组中,可以使用以下代码构建rec

代码语言:javascript
复制
while((br=getchar()) != '\n')
{
    rec[zbroj1]=br;
    zbroj1++;
}

C中的字符串需要在结尾处有一个\0字符来终止它们,所以您还需要有行来完成它

代码语言:javascript
复制
rec[zbroj1]='\0';

然后,检查长度的代码有一个逻辑错误--它使用的是||,这意味着两个表达式都必须为true,并且要打印出一个字符串,因此您希望使用&& (和)来确保zbroj1包含在4-8之间。

代码语言:javascript
复制
if(zbroj1>=4 && zbroj1<=8)

最后,输出一个字符串,但传递一个int。要打印出这个单词,您需要传入在rec中构建的字符串

代码语言:javascript
复制
 printf("Nova recenica je: %s", rec);

将所有这些更正组合在一起,您将得到代码的最终版本:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
   char rec[300];
   int zbroj1=0, br=0, zbroj2=0;

   while((br=getchar()) != '\n')
   {
     rec[zbroj1]=br;
     zbroj1++;
   }
   rec[zbroj1]='\0';
   if(zbroj1>=4 && zbroj1<=8)
    printf("Nova recenica je: %s", re);


   return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-06 12:09:05

有两个问题。第一个是getchar()的返回值。这

代码语言:javascript
复制
rec=getchar()

当然会引起警告,因为getchar()返回类型是int,而不是rec类型。来自getchar()的手册页

int getchar(无效); 返回值 getchar()在文件或错误结束时将读取为无符号字符的字符返回给intEOF

其次,使用逻辑-或||的逻辑或||作为&&打印rec,如果zbroj148之间,即当两种条件都为真时,例如

代码语言:javascript
复制
if(zbroj1>=4 && zbroj1<=8)

工作代码

代码语言:javascript
复制
#include<stdio.h>
int main(void) {
   int ret; 
   char rec[300];
   int zbroj1=0, br=0, zbroj2=0;

   while((ret=getchar()) != '\n') {
     rec[zbroj1] = ret; /* you need to store into array */
     zbroj1++;
   }
   rec[zbroj1] = '\0'; /* terminate the array with \0 */

   if(zbroj1>=4 && zbroj1<=8) /* use logical && */
    printf("Nova recenica je: %s", rec); /* use %d as zbroj1 is of int type*/
   return 0;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52203587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档