#include <stdio.h>
#include <string.h>
char str[50];
int main() {
int hasSign = 0;
printf("Enter your email: ");
scanf("%s", str);
// email validation
if (strchr(str, '@') != NULL) {
hasSign = 1;
}
printf("%s", hasSign "\n");
return 0;
}
當我hasSign在上層代碼中列印like的值時,如何列印換行符?
uj5u.com熱心網友回復:
這里有一個很大的問題 printf("%s", hasSign "\n" );
"\n"實際上是一個指向 const char 的指標,(const char *)它是由兩個字符組成的陣列: [0] = '\n',[1] = '\0'所以當你hasSign向它添加時,它實際上是在做指標運算。
為了通過示例清楚地說明,假設hasSign等于 0,因此hasSign "\n"評估0 "\n"哪個類似于&"\n"[0]= 指標,'\n'因此在這種情況下將列印一個新行。
但是當hasSign等于 1 時,因此hasSign "\n"評估1 "\n"which is like &"\n"[1]= pointer to '\0'which is a null character or 換言之“無”,因此在這種情況下不會列印任何內容。
對于你的問題:
當我在上面的代碼中列印 hasSign 的值時,如何列印換行符?
你可以這樣做 printf("%d\n", hasSign);
uj5u.com熱心網友回復:
您不能 在 C 中連接字串,也不能通過添加數字和字串將數字轉換為字串。您的程式編譯,因為hasSign "\n"不是語法錯誤:添加一個字串和一個整數計算為字串內的指標。如果hasSignis0和 nothing of hasSignequals ,程式將輸出換行符1。
這是一個修改版本,說明printf了字串和整數引數的用法:
#include <stdio.h>
#include <string.h>
int main() {
char str[50];
int hasSign = 0;
printf("Enter your email: ");
if (scanf("Is", str) != 1) { // prevent scanf from writing beyond s[49]
// exit upon input error
return 1;
}
// email validation
if (strchr(str, '@') != NULL) {
hasSign = 1;
}
printf("email: %s, hasSign: %d\n", str, hasSign);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335632.html
