我在C中编写一个非常小的程序,需要检查某个字符串是否为空。为了这个问题,我简化了我的代码:
#include <stdio.h>
#include <string>
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("%s", url);
} while (/*what should I put in here?*/);
return(0);
}
如果用户只是按Enter而不输入任何内容,我希望程序停止循环。
答案 0 :(得分:51)
由于C风格的字符串总是以空字符(\0
)终止,因此您可以通过编写
do {
...
} while (url[0] != '\0');
或者,你可以使用strcmp
函数,这是一种过度杀伤但可能更容易理解的内容:
do {
...
} while (strcmp(url, ""));
请注意,strcmp
如果字符串不同则返回非零值,如果它们相同则返回0,因此此循环继续循环,直到字符串为非空。
希望这有帮助!
答案 1 :(得分:13)
如果要检查字符串是否为空:
if (str[0] == '\0')
{
// your code here
}
答案 2 :(得分:7)
如果第一个字符恰好是'\0'
,那么你有一个空字符串。
这是你应该做的:
do {
/*
* Resetting first character before getting input.
*/
url[0] = '\0';
// code
} while (url[0] != '\0');
答案 3 :(得分:4)
通常情况下,你会很难在这里获得一个空字符串,考虑%s
忽略空格(空格,制表符,换行符)......但无论如何,scanf()
实际上都会返回成功比赛的次数......
从手册页:
成功匹配和分配的输入项目数量,可以少于提供的数量,或者在早期匹配失败时甚至为零。
所以,如果他们设法通过一个空字符串(例如ctrl+z
),你可以检查返回结果。
int count = 0;
do {
...
count = scanf("%62s", url); // You should check return values and limit the
// input length
...
} while (count <= 0)
请注意,您必须检查的时间少于因为在我给出的示例中,您将返回-1
,再次在手册页中详细说明:
如果在第一次成功转换或匹配失败发生之前达到输入结束,则返回值EOF。如果发生读取错误,也会返回EOF,在这种情况下,将设置流的错误指示符(请参阅ferror(3)),并设置errno指示错误。
答案 4 :(得分:3)
您可以检查scanf
的返回值。这段代码只会坐在那里,直到它收到一个字符串。
int a;
do {
// other code
a = scanf("%s", url);
} while (a <= 0);
答案 5 :(得分:2)
您可以尝试这样: -
if (string[0] == '\0') {
}
在你的情况下,它可能像: -
do {
...
} while (url[0] != '\0')
答案 6 :(得分:2)
strlen(url)
返回字符串的长度。它会计算所有字符,直到找到空字节。在您的情况下,请将其与0进行核对。
或者只需手动检查:
*url == '\0'
答案 7 :(得分:2)
首先将scanf()
替换为fgets()
...
do {
if (!fgets(url, sizeof url, stdin)) /* error */;
/* ... */
} while (*url != '\n');
答案 8 :(得分:0)
最简单的方法是:
do {
// Something
} while (*url);
基本上,*url
将返回数组中第一个位置的char;由于C字符串以空值终止,如果字符串为空,其第一个位置将是字符'\0'
,其ASCII值为0
;由于C逻辑语句将每个零值视为false
,因此当字符串的第一个位置为非空时,即当字符串不为空时,此循环将继续运行。
如果您想更好地理解这一点,建议阅读:
答案 9 :(得分:0)
我写下了这个宏
#define IS_EMPTY_STR(X) ( (1 / (sizeof(X[0]) == 1))/*type check*/ && !(X[0])/*content check*/)
原来如此
while (! IS_EMPTY_STR(url));
此宏的好处在于它是类型安全的。如果将字符放置到指向char的指针以外的其他位置,则会出现编译错误。
答案 10 :(得分:0)
这很简单。 在while条件中检查字符串为空的条件。
您可以使用strlen函数检查字符串长度。
{
"html_attributions" : [],
"result" : {
"address_components" : [
{
"long_name" : "Washington",
"short_name" : "WA",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
}
],
"adr_address" : "\u003cspan class=\"region\"\u003eWashington\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eUSA\u003c/span\u003e",
"formatted_address" : "Washington, USA",
"geometry" : {
"location" : {
"lat" : 47.7510741,
"lng" : -120.7401386
},
"viewport" : {
"northeast" : {
"lat" : 49.00256875707851,
"lng" : -116.9155800245149
},
"southwest" : {
"lat" : 45.54354101516995,
"lng" : -124.8489739457119
}
}
},
"icon" : "https://maps.gstatic.com/mapfiles/place_api/icons/v1/png_71/geocode-71.png",
"name" : "Washington",
"photos" : [],
"place_id" : "ChIJ-bDD5__lhVQRuvNfbGh4QpQ",
"reference" : "ChIJ-bDD5__lhVQRuvNfbGh4QpQ",
"types" : [ "administrative_area_level_1", "political" ],
"url" : "https://maps.google.com/?q=Washington,+USA&ftid=0x5485e5ffe7c3b0f9:0x944278686c5ff3ba",
"utc_offset" : -480,
"website" : "http://www.access.wa.gov/"
},
"status" : "OK"
}
检查第一个字符为'\ 0'
function MyComponent(props) {
const { dataArr } = props;
[ownDataArr, setOwnDataArr] = useState([...dataArr]);
// add useEffect wich depend on dataArr changing,
// because initial state is memoized by useState
useEffect(() => setOwnDataArr(dataArr), [dataArr])
return (
// ownDataArr is used here
);
}
供您参考:
C数组:
https://maps.googleapis.com/maps/api/place/details/json?place_id=ChIJ-bDD5__lhVQRuvNfbGh4QpQ&language=en&key=YOUR_API_KEY
https://www.javatpoint.com/c-array
C字符串:
https://scholarsoul.com/arrays-in-c/
https://www.programiz.com/c-programming/c-strings
https://scholarsoul.com/string-in-c/
答案 11 :(得分:-1)
使用strtok(),它可以在一行中完成:&#34; if(strtok(s,&#34; \ t&#34;)== NULL)&#34;。 例如:
#include <stdio.h>
#include <string.h>
int is_whitespace(char *s) {
if (strtok(s," \t")==NULL) {
return 1;
} else {
return 0;
}
}
void demo(void) {
char s1[128];
char s2[128];
strcpy(s1," abc \t ");
strcpy(s2," \t ");
printf("s1 = \"%s\"\n", s1);
printf("s2 = \"%s\"\n", s2);
printf("is_whitespace(s1)=%d\n",is_whitespace(s1));
printf("is_whitespace(s2)=%d\n",is_whitespace(s2));
}
int main() {
char url[63] = {'\0'};
do {
printf("Enter a URL: ");
scanf("%s", url);
printf("url='%s'\n", url);
} while (is_whitespace(url));
return 0;
}