在C中手动计算字符串中的字符数
我试图手动计算字符串中的字符数,包括任何空格。我把这个编码了:在C中手动计算字符串中的字符数,c,string,char,C,String,Char,我试图手动计算字符串中的字符数,包括任何空格。我把这个编码了: #include <stdio.h> #include <stdlib.h> void Unos(char* string, int duzina) { int i=0; char c; do { c=getchar(); string[i]=c; i++; } while(c != '\n' && i<d
#include <stdio.h>
#include <stdlib.h>
void Unos(char* string, int duzina)
{
int i=0;
char c;
do {
c=getchar();
string[i]=c;
i++;
} while(c != '\n' && i<duzina);
}
int brojznak(char* str)
{
int i=0,br=0;
while(*str++ != '\0')
{
br++;
}
return br;
}
int main()
{
char recenica[100];
printf("Unesite recenicu\n");
Unos(recenica,100);
int i=0;
printf("%d",brojznak(recenica));
return 0;
}
它有时也会打印一些随机字符,但会精确计数。有人能告诉我这段代码有什么问题吗?在
Unos()
中缺少字符串终止符
而brojznak()
中的(*str++!='\0')
不知道何时停止
void Unos(char* string, int duzina) {
int i=0;
char c;
do {
c = getchar();
string[i] = c;
i++;
} while(c != '\n' && (i + 1) <duzina); // Insure enough room
string[i]='\0'; // add this
}
void Unos(char*string,int duzina){
int i=0;
字符c;
做{
c=getchar();
字符串[i]=c;
i++;
}而(c!='\n'&(i+1)试试这个
for(i=0; getchar()!='\n'; ++i)
;
你想要这个代码的正确输出是什么?你说:另一方面,如果我们改变条件
。你发布的brojznak()
的第一个和第二个实现之间没有区别。你在哪里定义了recenica
,或者你的意思是printf(“%d”,brojznak(“recenica”));
第二个brojznak与第一个brojznak相同,我认为您需要解决这个问题。给定的字符串不会以'\0'
终止。是的。肯定是字符串终止。“如果流位于文件结尾,则设置流的文件结尾指示符,getchar
返回EOF
”当然,这个答案的代码将无休止地循环。
void Unos2(char* string, size_t duzina) {
size_t i = 0;
while ((i+1) < duzina) { Only attempt to read if space allows it.
int c = getchar(); // Use int to distinguish EOF from characters
if (c == EOF) break;
string[i] = c;
i++;
if (c == '\n') break;
}
string[i] = '\0'; // add this
}
for(i=0; getchar()!='\n'; ++i)
;