我必须做一个练习,我需要从键盘获取一个文本,最多1000行,每行最多有100个字符。
当用户输入带有" END"字的行时,我还需要完成输入的获取。并且我必须显示所有获得的行而不使用" END"行,以及所使用的所有字母数字字符,最后是使用过的单词总数。
我试图通过数组从键盘获取行,但是用于添加行的for循环不起作用,实际上循环在第一次调用后结束。
我认为这是因为阵列已经填满,但我不知道为什么以及如何修复它。
这是我的代码:
#include <stdio.h>
#define MAX_ROWS 1000
#define MAX_CHARACTERS 100
int main() {
int i;
char text[MAX_CARACTERS];
for(i=0;i<MAX_ROWS && text!="END";i++) {
scanf("%98[^\n]",text);
}
return 0;
}
答案 0 :(得分:2)
在C语言中,您必须使用strcmp
来比较字符串:
for(i=0; (i < MAX_ROWS) && strcmp(text, "END"); i++)
答案 1 :(得分:1)
你从未在text
中读到任何内容;但我假设这里的testo
意味着text
。
您不会将C字符串与==
进行比较 - 这只会测试两个指针是否指向同一个地址。你想要strcmp()
。
char text[MAX_CARACTERS] = "";
for (i = 0; (i < MAX_ROWS) && (strcmp(text, "END") != 0); i++) {
scanf("%98[^\n]",text);
}
答案 2 :(得分:0)
您可能还想考虑使用strncmp
char text[MAX_CHARACTERS] = {0};
for (i = 0; i < MAX_ROWS && strncmp(text, "END", 3) != 0; i++) {
scanf("%98[^\n]",text);
}
或字节序列比较,memcmp
(不是优雅的人会说)
char text[MAX_CHARACTERS] = {0};
for (i = 0; i < MAX_ROWS && memcmp(text, "END", 3) != 0; i++) {
scanf("%98[^\n]",text);
}